解析邮递员档案

时间:2013-08-24 13:41:49

标签: python regex

我目前正在尝试解析Mailman txt-archive文件。这些文件包含通过列表连接在一个文件中的所有电子邮件。结构是这样的:

From SOMETHING
From: SOMETHING
Date: SOMETHING
Subject: SOMETHING
In-Reply-To: SOMETHING
Message-ID: <SOMETHING>

CONTENT



From SOMETHING
From: SOMETHING
Date: SOMETHING
Subject: SOMETHING
In-Reply-To: SOMETHING
Message-ID: SOMETHING

CONTENT


[...]

问题是CONTENT可能包含换行符。所以我不能简单地在邮件中拆分存档,然后解析每条消息。

我尝试解析这个问题是:

def parseContent(content):
    import re
    pattern = r"From (.*)\n"+\
               "From: (.*)\n"+\
               "Date: (.*)\n"+\
               "Subject: (.*)\n"+\
               "In-Reply-To: (.*)\n"+\
               "Message-ID: (.*)\n"+\
               "(.*)"
    matches = re.findall(pattern, content)

    for from1, from2, date, subject, inreply, messageid, body in matches:
        print from1
        print body
        print "#"*20
    return matches

body不包含邮件正文,只包含一个换行符。如何使最后一个匹配组匹配所有内容,但只要上面的部分匹配,身体匹配组就不匹配?

1 个答案:

答案 0 :(得分:2)

这里有两个选项:

  1. 有一个标准的库模块可以打开,读取和写入邮件存档。 mailbox模块是您想要的模块,特别是mailbox.mbox看起来应该是您想要的模块。

  2. 在邮件存档中,每封邮件都以字符串\nFrom开头。这将永远不会出现在消息正文中,因为From字符串将以大于号(>)作为前缀。请注意,邮件头(带冒号的行)由RFC-2822定义,不属于邮箱格式。我认为RFC没有为消息头指定任何特定的顺序。