Regexp记事本++怎么放不正确

时间:2016-03-18 16:24:14

标签: regex notepad++

我的.txt文件包含6,000,000行。我想要刮掉140,000行。我使用reepx101的notepad ++ insted因为有太多的行要刮掉。整个文件看起来像这样:

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和他的消息。

例如:

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

好的,这似乎很容易,对吧?问题是,当我搜索:

Sender: .+ <.+> 

它给出了140,000行

但是当我搜索:

Message: .+
它给了我139,094行。我试图找到“断行”:

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

但这不起作用。我认为我的编码技巧还不够好。我只是不知道我错在哪里。

我还试图找到“好”的行:

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

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

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

现在,当我点击“搜索 - &gt;书签 - &gt;复制书签行”时,我只有:

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

没有消息..我很厌倦它。有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

我希望我能正确理解你的问题,这就是我将如何做到这一点:

在Notepad ++中打开文件,然后按Ctrl + F打开搜索对话框,将标签更改为&#34;标记&#34;。然后检查&#34; Mark line&#34;并激活正则表达式。

Mark Dialog

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

First Mark

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

Second Mark

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

Remove Unmarked enter image description here

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

Final