使用此正则表达式模式匹配除电子邮件之外的所有内容

时间:2016-02-29 05:13:26

标签: regex string email pattern-matching

所以,我有大量的文字,其中包含大量不必要的信息(在谷歌表中)。我想匹配除了EMAIL以外的所有内容,我使用以下正则表达式:

[a-zA-Z0-9_.+-]+@(?:[a-zA-Z0-9-]+\.)+(?!png|jpg|gif)[a-zA-Z0-9-]+

如果我能设法匹配除电子邮件之外的所有内容,那么我只能查找/替换并只留下我想要的行中的电子邮件。在这里遇到一些麻烦。帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

虽然它并不完美,但这可能是你所追求的:

对于在线演示,这有效:^(?:.*?(\w[^@\s]*@[^@\s]{2,}).*?|.+)$ demo

但是对于Google表格,您需要删除^$行开始/结束标记,它应该完成您想要的大部分操作。所以:

(?:.*?(\w[^@\s]*@[^@\s]{2,}).*?|.+)

用$ 1替换此模式,只留下每行的电子邮件地址

每行都有效,该模式由非捕获组(?:中的两个模式组成。第一个模式从行.*?的开头看起来懒洋洋地匹配所有字符,直到包含电子邮件模式(\w[^@\s]*@[^@\s]{2,})的group1后跟任何其他.*直到行尾。第二个模式将匹配所有其他行没有电子邮件。这是搜索模式。替换模式只是group1 $1。如果没有找到电子邮件地址,Group1将为空,因此每行将为空白或填充电子邮件地址。

这可能与所有电子邮件地址不匹配,但应匹配最多。有关正则表达式匹配电子邮件地址的详细阅读,请参阅this question

答案 1 :(得分:0)

除了电子邮件,你无法匹配所有内容。但是你可以匹配所有电子邮件。

匹配任何非贪婪的内容,然后是捕获的电子邮件或字符串结尾。全局更改为捕获组:

"BLAHBLAHemailBLAHBLAHemailBLAH".replace(/.*?(email|$)/g, "$1");
// => "emailemail"

(插入您自己的电子邮件regexp。)