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

Regex 使用此正则表达式模式匹配除电子邮件之外的所有内容,regex,string,email,pattern-matching,Regex,String,Email,Pattern Matching,因此,我有一行文本,其中包含大量不必要的信息(在谷歌表格中)。我想匹配除我使用以下正则表达式的电子邮件以外的所有内容: [a-zA-Z0-9_.+-]+@(?:[a-zA-Z0-9-]+\.)+(?!png|jpg|gif)[a-zA-Z0-9-]+ 如果我能够匹配除电子邮件之外的所有内容,那么我就可以只查找/替换并将我想要的电子邮件保留在行中。这里有点麻烦。谢谢你的帮助 除了电子邮件,你无法匹配所有内容。但是你可以把所有的东西和电子邮件联系起来 匹配任何不贪婪的内容,后跟捕获的电子邮件或字符

因此,我有一行文本,其中包含大量不必要的信息(在谷歌表格中)。我想匹配除我使用以下正则表达式的电子邮件以外的所有内容:

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

如果我能够匹配除电子邮件之外的所有内容,那么我就可以只查找/替换并将我想要的电子邮件保留在行中。这里有点麻烦。谢谢你的帮助

除了电子邮件,你无法匹配所有内容。但是你可以把所有的东西和电子邮件联系起来

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

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

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

虽然它并不完美,但这可能是您想要的:

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

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

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

将此模式替换为$1,只保留每行的电子邮件地址

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


这可能不匹配所有电子邮件地址,但应该匹配大多数。有关regex匹配电子邮件地址的详细信息,请参阅。

regex很大程度上取决于您使用的风格。您打算在哪个应用程序/编程语言中使用regex?某些regex风格不支持反向查找,因此。我打算使用javascript,但对于现在只需一个简单的Google表单查找/替换,并选中“使用正则表达式搜索”框。如果你有其他想法-让我知道-谢谢!谢谢!但根据我最初的请求,我正在查找除电子邮件地址以外的所有内容,以便在查找/替换时,只剩下剩下剩下的电子邮件。谢谢你的帮助p!你检查过演示了吗?这正是你想要的。它所做的是查找所有内容,但将电子邮件标记为一个组。在进行替换时,它会将每一行填充为组1。因此只留下电子邮件地址。谢谢,关闭!但事情是这样的:哦,对了。我没有考虑过regex在Google工作表中的工作方式。你可以在中尝试1美元代替\1。我想我的模式可能会在一些裁剪后工作。只是做了一个快速测试。
$1
作为替换值工作,但正如我怀疑的,^和$line开始/结束标记导致多行单元格不匹配