Regexp notepad++怎么放不对

Regexp notepad++ how to put not properly

我有包含 6,000,000 行的 .txt 文件。我想抓取 140,000 行。我使用的是 notepad++ insted of regex101,因为要抓取的行太多。整个文档看起来像这样:

MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain; charset="UTF-8"

Sender: nick <email@gmail.com>
Message: Thats my message**

MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain; charset="UTF-8"

Sender: another-nick <another-email@gmail.com>
Message: Another message

MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain; charset="UTF-8"

当然看起来不完全是那样。不是 "Sender" 和 "Message" 的行有点随机。我想提取 "Sender" 行中的每封电子邮件以及电子邮件中的每封邮件。当然我想把消息和电子邮件结合起来,所以我必须有发件人和他的消息。

例如:

email1 - his message
email2 - his message
email3 - his message

好的,看起来很简单,对吧?问题是,当我搜索时:

Sender: .+ <.+> 

它给 mi 140,000 行

但是当我搜索:

Message: .+

它给了我 139,094 行。我试图用那个找到 "broken rows":

^(?!Sender: .+ <.+>)\r\n\Message: .+)

但这不起作用。我认为我的编码技能不够好。我只是不知道我哪里做错了。

我还试图找到 "good" 行:

Sender: .+ <.+>\r\n\Message: .+

它工作正常。但我不知道如何提取它。我为每个找到的正则表达式添加书签,它看起来像这样:

http://puu.sh/nL6n4/3f6331b16b.png

现在,当我点击 "Search -> Bookmark -> copy bookmarked lines" 时,我只有:

Sender: nick <email@gmail.com>
Sender: another-nick <another-email@gmail.com>

没有消息..我已经厌倦了。有人可以帮我吗?

我希望我理解正确你的问题,这里是,我会怎么做:

在 Notepad++ 中打开文件,然后按 Ctrl+F 打开搜索对话框并将选项卡更改为 "mark"。然后检查 "Mark line" 并激活正则表达式。

要搜索的第一个正则表达式是 Sender:[^<\r\n]*<([^\r\n]*)>\r?\nMessage:\s*([^\r\n]*)。这将为所有以发件人开头的行添加书签(然后是消息行)。

然而,这并不标记消息行,因为 Notepad++ 不支持这一点 - 但我们可以通过进行另一个标记搜索来欺骗一下。现在正则表达式是 Sender:[^<\r\n]*<([^\r\n]*)>\r?\n\KMessage:\s*([^\r\n]*)。请注意 \K 以重置标记开始。现在还标记了消息行。

转到搜索 - 书签 - 删除未标记的行,以便只留下您的发件人和消息行。

现在是替换的时候了,再次使用正则表达式 Sender:[^<\r\n]*<([^\r\n]*)>\r?\nMessage:\s*([^\r\n]*) 并将其替换为 -