使用Regex删除不是电子邮件地址的所有内容

时间:2014-05-23 09:01:20

标签: regex notepad++

我的行包含电子邮件地址和隐藏的电子邮件地址变体,例如,使用[at]代替@。我想从不是电子邮件地址的所有内容中清除此列表。

TLD为.com.us.me

示例输入

johndoe@example.com
johndoe @example.us
contant johndoe @ example . me
my email is johndoe@example.com
johndoe@example.com is my email
this johndoe @ example.com is my mail
johndoe[at]example.com 
my email is johndoe [at] example.com
johndoe[at-sign]example.com
johndoe at example.com
johndoe[at-sign]example[dot]com is my mail
Lorem ipsum dolor sit amet, consectetur adipisicing elit, johndoe[at-sign]example[dot]us 
johndoe[at-sign]example[dot]me labore et dolore magna aliqua
Sed do eiusmod tempor incididunt johndoe at example dot com
Duis aute irure dolor in reprehenderit in voluptate  JOHNDOE at EXAMPLE dot US aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum johndoe at example dot me

我正在使用Notepad ++搜索和替换,我的尝试是[\w]+(|\s)(@|at|\[at\]|\[at-sign\])(|\s)[\w]+(|\s)(\.|dot)(|\s)(com|us|me),它似乎适用于所有内容,但不适用于第11,12,13和15行。

我自己写这个,这是正确的方法吗?

期望的输出:

johndoe@example.com
johndoe@example.us
johndoe @ example . me
johndoe@example.com
johndoe@example.com
johndoe@example.com
johndoe[at]example.com 
johndoe [at] example.com
johndoe[at-sign]example.com
johndoe [at-sign] example.com
johndoe[at-sign]example[dot]com
johndoe[at-sign]example[dot]us 
johndoe[at-sign]example[dot]me
johndoe at example dot com
JOHNDOE at EXAMPLE dot US
johndoe at exampledotme

因为我读过e-mail validation can be hard,所以我不希望这是100%防弹。

1 个答案:

答案 0 :(得分:1)

您可以稍微简化一下你的正则表达式,而你正在使用的正则表达方式的错误在于你不匹配dot周围的方括号:

\w+\s?(?:@|at|\[at(?:-sign)?\])\s?\w+\s?(?:\.|\[dot\]|dot)\s?(?:com|us|me)
                                              ^^^^^^^

regex101 demo

虽然如果你想删除其他所有东西,你可以使用它:

^(?:.*?(\w+ ?(?:@|at|\[at(?:-sign)?\]) ?\w+ ?(?:\.|\[dot\]|dot) ?(?:com|us|me)).*|.*)$

并替换为$1

regex101 demo