使用带有Python的正则表达式从电子邮件中提取一些信息

时间:2011-02-03 22:38:15

标签: python regex parsing

我需要解析elmx(Mac OS X电子邮件文件格式)中的电子邮件文件,以使用Python的正则表达式提取一些信息

电子邮件包含以下格式,之前和之后有很多文字。

...

Name and Address (multi line)

Delivery estimate: SOMEDATE

BOOKNAME
AUTHOR and PRICE

SELLER

...

示例如下。

...

Engineer1 
31500 N. Mopac Circle.
Company, Building A, 3K.A01
Dallas, TX 78759
United States

Delivery estimate: February 3, 2011

1 "Writing Compilers and Interpreters"
Ronald Mak; Paperback; $21.80

Sold by: Textbooksrus LLC

...

如何解析电子邮件以提取它们?我通常使用line = file.readline(); for line in lines,但在这种情况下,一些信息是多行的(例如地址)。

问题是那些信息只是大文件的一部分,所以我需要找到一种方法来检测它们。

3 个答案:

答案 0 :(得分:1)

我认为你不需要正则表达式。您可以通过使用readlines加载文件来执行此操作,然后使用字符串模块中的startswith()方法迭代查找“Delivery estimate:”。此时,您有一个数据所在的行号。

您可以通过从行号向后扫描来查找地址,以查找由空行分隔的文本块。在寻找空行时不要忘记使用strip()。

然后从传递估计线进行正向扫描以获取其他信息。 比正则表达式快得多。

答案 1 :(得分:0)

执行data = file.read()会给你整个shabang,然后确保添加行结束并在需要时启动你的正则表达式。

答案 2 :(得分:0)

您可以拆分双\n\n并从那里开始工作:

>>> s= """
... Engineer1 
... 31500 N. Mopac Circle.
... Company, Building A, 3K.A01
... Dallas, TX 78759
... United States
... 
... Delivery estimate: February 3, 2011
... 
... 1 "Writing Compilers and Interpreters"
... Ronald Mak; Paperback; $21.80
... 
... Sold by: Textbooksrus LLC
... """
>>> name, estimate, author_price, seller = s.split("\n\n")
>>> print name
Engineer1 
31500 N. Mopac Circle.
Company, Building A, 3K.A01
Dallas, TX 78759
United States