首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python regex展望未来

Python regex展望未来
EN

Stack Overflow用户
提问于 2014-04-07 00:52:44
回答 1查看 249关注 0票数 1

好的,我有电子邮件的文本文件,我需要提取"From“、" to”、"CC“、"Subject”和"Date“字段,并以以下格式将它们写入CSV:

代码语言:javascript
复制
Date    Subject    From    To    CC

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

代码语言:javascript
复制
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,但是我一点也没有运气.

甚至都没有接近。

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-07 01:59:56

我可以使用python的re.S标志使用下面的regex来获取您想要的数据。

代码语言:javascript
复制
r'(From:.*).*(To:.*).*(CC:.*).*(Subject:.*).*(Date:.*)'

你可以这样做:

代码语言:javascript
复制
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 -0400\n-----------------\nTesting Email extraction.']

您可以在data列表中得到结果。使用以csv为分隔符的\t模块,并以所需的格式写出标头和数据。当然,其中也有\n,但是您可以在写入文件之前遍历列表中的项来去掉它们。

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22901948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档