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]*)
并将其替换为 -
。
我有包含 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]*)
并将其替换为 -
。