0

我目前正在尝试解析 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不包含消息的正文,而只有一个换行符。我怎样才能使最后一个匹配组匹配所有内容,但是只要上面的部分匹配,身体匹配组就不应该匹配?

4

1 回答 1

3

您在这里有两个选择:

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

  2. 在邮递员档案中,每条消息都以字符串开头\nFrom。这绝不会出现在消息正文中,因为From字符串将以大于符号 ( >) 为前缀。请注意,邮件标题(带有冒号的行)由 RFC-2822 定义,不是邮箱格式的一部分。我相信 RFC 没有为消息头指定任何特定的顺序。

于 2013-08-24T14:21:15.703 回答