Python 正则表达式向前看向后看



好的,我有电子邮件的文本文件,我需要提取"发件人","收件人","抄送","主题"和"日期"字段,并按以下格式将它们写入CSV:

Date    Subject    From    To    CC

这些文件类似于以下内容:

From: "John Smith" <jsmith@jsmith.com>
To: <john.doe.1@gmail.com>, <john.doe.2@gmail.com>,
<john.doe.3@gmail.com>, <john.doe.4@gmail.com>,
<john.doe.6@yahoo.com>, <john.doe.5@gmail.com>, <jdoe@live.com>,
<j.doe.5@live.com>
CC: 
Subject: Test Email Extraction
Date: Sun, 6 Apr 2014 19:30:55 -0400
-----------------
Testing Email extraction.

我遇到的问题是"TO"和"CC"行几乎总是有许多条目占用多行。

我认为提取此信息以放入 CSV 的解决方案是使用 REGEX,但我根本没有运气......

甚至没有靠近。

有什么建议吗?

我可以通过使用python的re.S标志使用以下正则表达式来获取您想要的数据。

r'(From:.*).*(To:.*).*(CC:.*).*(Subject:.*).*(Date:.*)'

你可以做这样的事情:

In [1]: data = '''
   ...: From: "John Smith" <jsmith@jsmith.com>
   ...: To: <john.doe.1@gmail.com>, <john.doe.2@gmail.com>,
   ...: <john.doe.3@gmail.com>, <john.doe.4@gmail.com>,
   ...: <john.doe.6@yahoo.com>, <john.doe.5@gmail.com>, <jdoe@live.com>,
   ...: <j.doe.5@live.com>
   ...: CC:
   ...: Subject: Test Email Extraction
   ...: Date: Sun, 6 Apr 2014 19:30:55 -0400
   ...: -----------------
   ...: Testing Email extraction.
   ...: '''
In [2]: import re
In [3]: results = re.findall(r'(From:.*).*(To:.*).*(CC:.*).*(Subject:.*).*(Date:.*)', data, re.S)
In [4]: headers = ['From', 'To', 'CC', 'Subject', 'Date']
In [6]: data = [item.strip() for item in results[0]]
In [7]: data
Out[7]:
['From: "John Smith" <jsmith@jsmith.com>',
 'To: <john.doe.1@gmail.com>, <john.doe.2@gmail.com>,n<john.doe.3@gmail.com>, <john.doe.4@gmail.com>,n<john.doe.6@yahoo.com>, <john.doe.5@gmail.com>, <jdoe@live.com>,n<j.doe.5@live.com>',
 'CC:',
 'Subject: Test Email Extraction',
 'Date: Sun, 6 Apr 2014 19:30:55 -0400n-----------------nTesting Email extraction.']

结果data列表中。使用带有 tcsv 模块作为分隔符,并以所需的格式写出标头和数据。当然,里面有n,但是您可以通过在写入文件之前遍历列表中的项目来去除它们。

希望这有帮助。

最新更新