在记事本++中删除正则表达式之外的所有内容

Deleting everything outside of regex in notepad++

我在这里查看了多个问题,我已经接近得到答案,但是,其中一些与我需要他们做的完全相反。不过,这实际上是一个好兆头,因为它表明我正在取得一些进步。 我想要做的是从我找到的数据库中创建一个 大量 电子邮件列表。每行都包含我没有实际用途的电子邮件地址前后的随机文本,我想删除它们以便我可以拥有一个干净的电子邮件列表。 每行看起来像这样:(我不得不审查一些信息)

3e:visito****@hotmail.com:88.247.216.***:s*****1

每一行都非常像这样,我需要一种方法来删除正则表达式标记前后的所有内容。

this 问题中,我找到了一个可以完美选择所有电子邮件的正则表达式。

\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}\b

此外,在 this 问题上,我在 Notepad++ 的 Replace With 框中找到了一些东西,它会删除电子邮件并留下除电子邮件以外的所有内容。所以,从本质上讲,我需要一些与此完全相反的东西。

此外,大约有 1000 万行 (844MB 数据库) 需要处理,因此它需要大部分自动化并且易于多次执行以节省时间。

提前致谢。

正如 @stribizhev 的评论所述,我需要执行以下操作:

1:在查找内容框中添加以下正则表达式:

(?s)^.*?(\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}\b)[^\n]*

2:将以下内容添加到替换为框:


就是这样!非常感谢大家!

如果您的文件已格式化并由 : 分隔,也许此正则表达式更适合您:

[^:]*:([^:]*):.*

并将其替换为


通过这种方式,您可以获得分隔符的好处。

勾选Here

可以帮助您的技术是两步走:

  • 首先,您需要将正则表达式放在 (?s)^.*?(YOUR_REGEX)[^\n]* 中(将其键入 Find What 字段),然后使用 </code>(对用原始模式捕获的文本的反向引用)在 <em>替换为</em> 字段中。</p></li> <li><p>然后,手动删除最后不需要的文字。</p></li> </ul> <p>所以,在你的情况下,使用</p> <pre><code>(?s)^.*?(\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}\b)[^\n]*

    稍微优化一下(注意这里的 [A-Za-z0-9_] 可以替换为 \w),你可以使用下面的正则表达式 . matches newline 选项 ON:

    ^.*?(\b[\w.%+-]+@[\w.]+\.\pL{2,4}\b)[^\n]*
    

    说明:

    • ^ - 记事本++中的行首
    • .*? - 任何字符,零次或多次出现,尽可能少直到第一个单词边界
    • (\b[\w.%+-]+@[\w.]+\.\pL{2,4}\b) - 您的 匹配 模式位于一对未转义的括号内,以便将捕获存储在缓冲区中:
      • \b - 单词边界
      • [\w.%+-]+ - 1 个或多个单词字符(字母、数字或下划线)
      • @ - @ 符号
      • [\w.]+ - 1 个或多个单词字符或 .
      • \. - 一个点
      • \pL{2,4} - 2 到 4 个字母
      • \b - 尾随单词边界
    • [^\n]* - 除换行符外的 0 个或多个字符