2011-02-03 21 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()。

然後從交付估算行進行正向掃描以獲取其他信息。 也比正則表達式快得多。