如何使用正则表达式在python中区分两个电子邮件与一个字符串

时间:2016-10-17 01:11:41

标签: python regex

我有一个包含两封电子邮件的字符串(来自页面来源):

<span class="inlinemeta">From:                               D Hui &lt;dhui@tcmclinic.com&gt;
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所以请原谅我,如果问题太简单或太容易在网上找到解决方案。

与此同时,我肯定会试着看看能不能弄清楚。

1 个答案:

答案 0 :(得分:0)

这是一个更通用的解决方案,将文本分成几行。它还使用splitstrip来处理日期和主题,而不使用正则表达式。

import re

message_text = """
<span class="inlinemeta">From:                               D Hui &lt;dhui@tcmclinic.com&gt;
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