我需要解析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
,但在这种情况下,一些信息是多行的(例如地址)。
问题是那些信息只是大文件的一部分,所以我需要找到一种方法来检测它们。
答案 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