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