我有一连串电子邮件的原始文本。
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']