在python中如何使用regex区分两封电子邮件和一个字符串

2024-09-30 09:24:29 发布

您现在位置:Python中文网/ 问答频道 /正文

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

<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一周前,所以请原谅我,如果问题太简单或太容易找到一个在线解决方案。你知道吗

同时,我一定会自己试试看是否能弄明白。你知道吗


Tags: 字符串fromltgtcom页面解决方案class
1条回答
网友
1楼 · 发布于 2024-09-30 09:24:29

这是一个更通用的解决方案,将文本分成几行。它还使用splitstrip来处理没有regex的日期和主题。你知道吗

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

相关问题 更多 >

    热门问题