以上答案取决于您的文本与您的示例非常相似。这段代码更加灵活,可以匹配文本中任意数量的电子邮件。我没有详细记录它,但是...
harvest_emails 接受一串行分隔的字符串,每个字符串都以逗号分隔,如您的示例中date,message_string,identifier,并返回一个生成器,该生成器生成一个 3 长度元组 (date,comma-sep-emails,identifier) .它将从文本中提取任意数量的电子邮件,并匹配任何形式为 x@x.com | x@x.net | x@x.org 的电子邮件,其中 x 是任何非零长度的非空白字符系列。
def harvest_emails(target):
""""Takes string, splits it on \n, then yields each line formatted as:
datecode, email, identifier
"""
import re
for line in target.splitlines():
t = line.split(",")
yield (
t[0].strip(),
','.join(
re.findall("\S+@\S+\.(?:com|org|net)",
''.join(t[1:-1]).strip(),re.I)[0:]),
t[-1].strip())
.
>>>messages = """04:34:03 +0000 2013,Email me for tickets email me at stormyjackson28@Gmail.com,1708824644
Tue Dec 17 04:33:58 +0000 2013,@musclepotential ok, man. you can email sbrown9049@gmail.com,25016561
Tue Dec 17 04:34:03 +0000 2013, stormyjackson28@Gmail.Com, name@domain.com,1708824644
Tue Dec 17 04:33:58 +0000 2013, brown9049@gmail.com,25016561"""
>>>data = list()
>>>for line in harvest_emails(messages):
d = dict()
d["date"],d["emails"],d["id"] = line[0],line[1].split(','),line[2]
data.append(d)
>>>for value in data:
print(value)
{'emails': ['stormyjackson28@Gmail.com'], 'date': '04:34:03 +0000 2013', 'id': '1708824644'}
{'emails': ['sbrown9049@gmail.com'], 'date': 'Tue Dec 17 04:33:58 +0000 2013', 'id': '25016561'}
{'emails': ['stormyjackson28@Gmail.Com', 'name@domain.com'], 'date': 'Tue Dec 17 04:34:03 +0000 2013', 'id': '1708824644'}
{'emails': ['brown9049@gmail.com'], 'date': 'Tue Dec 17 04:33:58 +0000 2013', 'id': '25016561'}