Regex查找前两个字符串实例之间的电子邮件地址



我有一连串电子邮件的原始文本。

For all inquiries please reach out
From: abc@abc.com At: 01/27/21 23:29:28To: CompanyA
Cc: 123@123.com, 345@345-YYY.com Subject: this is the subject line
From: CompanyB(company) <mmm@mmm.net>
Sent: Wednesday, January 27, 2021 12:51 PM
From: 999@999.com At: 01/27/21 23:29:28To: CompanyA
Cc: 888@888.com, 777@777.com Subject: tect

通过Regex,我需要从捕获第一个单词之间的电子邮件地址第一个主题. 在上面的匹配应该是:
abc@abc.com
123@123.com
345@345-YYY.com

我有( n) {0,1} (( w。)@ ( w + -。))获取电子邮件地址。我将通过Python Regex Lib进行匹配。

一个选择是使用两个模式。

首先查找从From:Subject:第一次出现的所有匹配

(?s)bFrom:.*?bSubject:

然后对于所有这些匹配,获得电子邮件地址类似模式,而不匹配<>

[^<>s@]+@[^@s<>]+

例子
import re
s = ("For all inquiries please reach outn"
"From: abc@abc.com At: 01/27/21 23:29:28To: CompanyAn"
"Cc: 123@123.com, 345@345-YYY.com Subject: this is the subject linen"
"From: CompanyB(company) <mmm@mmm.net>n"
"Sent: Wednesday, January 27, 2021 12:51 PMn"
"From: 999@999.com At: 01/27/21 23:29:28To: CompanyAn"
"Cc: 888@888.com, 777@777.com Subject: tect")
for match in re.findall(r"(?s)bFrom:.*?bSubject:", s):
print(re.findall(r"[^<>s@]+@[^@s<>]+", match))

输出
['abc@abc.com', '123@123.com,', '345@345-YYY.com']
['mmm@mmm.net', '999@999.com', '888@888.com,', '777@777.com']

如果您不想再次出现From:Subject,您可以使用负向前看检查该行是否包含任何字符串。

^From:.*(?:r?n(?!From|.*bSubject:).*)*r?n.*bSubject:

Regex演示

例子
for match in re.findall(r"(?m)^From:.*(?:r?n(?!From|.*bSubject:).*)*r?n.*bSubject:", s):
print(re.findall(r"[^<>s@]+@[^@s<>]+", match))

输出
['abc@abc.com', '123@123.com,', '345@345-YYY.com']
['999@999.com', '888@888.com,', '777@777.com']

最新更新