2011-02-03 51 views
1

我需要解析的邮件文件中elmx(Mac OS X中的电子邮件文件格式)中提取使用正则表达式的一些信息与Python提取使用正则表达式使用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,但在这种情况下,某些信息是多行的(例如地址)。

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

+0

我发现了这个错误。邮编78759实际上是在奥斯汀,而不是达拉斯;-) – 2011-02-03 22:42:48

回答

0

data = file.read()这将给你整个shabang,然后确保添加行结束,并开始在你需要的正则表达式。

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 
+0

事情是,这些信息只是大文件的一部分,所以我需要找到一种方法来检测它们。 – prosseek 2011-02-03 23:06:47

1

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

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

然后从交付估算行进行正向扫描以获取其他信息。 也比正则表达式快得多。