我有一个包含两封电子邮件的字符串(来自页面来源):
<span class="inlinemeta">From: D Hui <dhui@tcmclinic.com>
Sent: Friday, June 18, 2010 12:57 PM
</span>
<span class="inlinemeta">To: 'pcox@medcoc.org'
Subject: New med approved?
我需要的是提取四个属性:SentFrom,SentTo,SentOn,Subject。
借助stackoverflow的帮助,我能够获得SentOn,我现在不知道如何区分这两封电子邮件。 考虑到要解析的实际原始文本可能有所不同,像From这样的未成年人可能包含前缀(在这种情况下它是D Hui)或者可能不包括(如第二封电子邮件),而To也可能是那,我真的需要在解决方案上有一点灵活性。
非常感谢您提前,我刚刚在一周前开始使用python所以请原谅我,如果问题太简单或太容易在网上找到解决方案。
与此同时,我肯定会试着看看能不能弄清楚。
答案 0 :(得分:0)
这是一个更通用的解决方案,将文本分成几行。它还使用split
和strip
来处理日期和主题,而不使用正则表达式。
import re
message_text = """
<span class="inlinemeta">From: D Hui <dhui@tcmclinic.com>
Sent: Friday, June 18, 2010 12:57 PM
</span>
<span class="inlinemeta">To: 'pcox@medcoc.org'
Subject: New med approved?
"""
email_regex = r"[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+"
for line in message_text.split('\n'):
line = line.rstrip()
if 'From:' in line:
e_from = re.search(email_regex, line).group(0)
if 'Sent:' in line:
e_sent = line.split(':')[1].strip()
if 'To:' in line:
e_to = re.search(email_regex, line).group(0)
if 'Subject:' in line:
e_subject = line.split(':')[1].strip()
print "e_from = %s" % e_from
print "e_sent = %s" % e_sent
print "e_to = %s" % e_to
print "e_subject = %s" % e_subject
<强>输出强>
e_from = dhui@tcmclinic.com
e_sent = Friday, June 18, 2010 12
e_to = pcox@medcoc.org
e_subject = New med approved?
email_regex
来自emailregex.com