Regex 使用Python正则表达式自动化文本提取
我正在从事一个自动化项目,该项目涉及使用python脚本解析txt文件,并重复提取关键字后面的3行数据。为了提供上下文,txt文件包含数百个形式相同的字母,除了末尾的名称和地址之外。我的最终目标是逐步完成所有这些表单字母,提取姓名和地址,并使用openpyxl将其放入Excel电子表格中。下面是一个txt文档的示例Regex 使用Python正则表达式自动化文本提取,regex,excel,python-3.x,automation,Regex,Excel,Python 3.x,Automation,我正在从事一个自动化项目,该项目涉及使用python脚本解析txt文件,并重复提取关键字后面的3行数据。为了提供上下文,txt文件包含数百个形式相同的字母,除了末尾的名称和地址之外。我的最终目标是逐步完成所有这些表单字母,提取姓名和地址,并使用openpyxl将其放入Excel电子表格中。下面是一个txt文档的示例 Dear Sir, Body of letter that is the same for all of the letters. Etc. Sincerely, Mr. Jo
Dear Sir,
Body of letter that is the same for all of the letters. Etc.
Sincerely,
Mr. John Smith
123 Any Street
Anytown, USA 11111
等等(这些字母不断地用不同的名字,需要提取)
我的问题是,如何在python中使用regex设置“最后一个单词关键字”(在这批特定字母中为“真诚”,但可以在另一个单独的txt文件中更改为“问候”)并将上面显示的每个括号中的项提交到内存中(括号对应于最终的Excel列,如后缀、名字、姓氏、地址、城镇)然后一步一步地看这数百个字母中的每一个?使用正则表达式或python通常简单吗?我想我可以用一个字母来做这件事,但我一直在思考如何继续下一个字母的下一个结尾关键字。如果有人对什么是最有效的方法有任何想法,我将非常感谢,我知道发布我最初解决这个问题的方法很有必要,但是由于我对regex操作完全不熟悉,所以我的尝试甚至没有成功。另外,请告诉我我是否正在做一些与堆栈溢出问题无关的事情,因为我是新来的
输入示例:letters input.txt
2017年3月30日收到的电子邮件:
Dear Sir,
I would be delighted to be placed on your mailing list. Please keep up the great work!
Sincerely,
Mr. Thomas Dahlmer
46 Alpine Street
Evanston, Il 60201
Dear Sir,
I would be delighted to be placed on your mailing list. Please keep up the great work!
Sincerely,
Ms. Angela Carraway <br/>
402 Arlington Drive <br/>
Concord, MA 01742
2017年3月30日收到的电子邮件:
Dear Sir,
I would be delighted to be placed on your mailing list. Please keep up the great work!
Sincerely,
Mr. Thomas Dahlmer
46 Alpine Street
Evanston, Il 60201
Dear Sir,
I would be delighted to be placed on your mailing list. Please keep up the great work!
Sincerely,
Ms. Angela Carraway <br/>
402 Arlington Drive <br/>
Concord, MA 01742
亲爱的先生:
我很高兴被列入您的邮件列表。请继续努力
真诚地
罗伯特·诺兰先生麦迪逊大道1104号
纽约,纽约10021 2017年3月30日收到的电子邮件:
Dear Sir,
I would be delighted to be placed on your mailing list. Please keep up the great work!
Sincerely,
Mr. Thomas Dahlmer
46 Alpine Street
Evanston, Il 60201
Dear Sir,
I would be delighted to be placed on your mailing list. Please keep up the great work!
Sincerely,
Ms. Angela Carraway <br/>
402 Arlington Drive <br/>
Concord, MA 01742
亲爱的先生,
我很高兴被列入您的邮件列表。请继续努力!
真诚地
安吉拉·卡拉韦女士
402阿灵顿大道
康科德,马萨诸塞州01742
示例输出
lettersoutput.txt
Mr. Thomas Dahlmer <br/>
46 Alpine Street <br/>
Evanston, Il 60201
Mr. Robert Nolan <br/>
1104 Madison Avenue <br/>
New York, NY 10021
Ms. Angela Carraway <br/>
402 Arlington Drive <br/>
Concord, MA 01742
托马斯·达尔默先生
阿尔卑斯街46号
伊利诺伊州埃文斯顿60201
罗伯特·诺兰先生
麦迪逊大道1104号
纽约,纽约10021
安吉拉·卡拉韦女士
402阿灵顿大道
康科德,马萨诸塞州01742
有点长:真诚地,[\s\n]+([\w\.]+)\s+(\w+)\s+(\w+)[\s\n]+(\d+\s\w+\s\w+[\s\n]+(\w+\s?\w+,\s\w+\s\d+)
它捕获为5个组:Title、Firstname、Lastname、Address1、Address2
演示:
有五个偏执狂,每个偏执狂代表一个捕获组:
([\w\.]+)
匹配并捕获第一组:标题
(\w+)
匹配并捕获第二组:Firstname
(\w+)
匹配并捕获第三组:Lastname
(\d+\s\w+\s\w+)
匹配并捕获第四组:Address1
(\w+\s?\w+,\s\w+\s\d+)
匹配并捕获第五组:地址2
其余的正则表达式只是填补了捕获组之间的空白,它们只匹配但不捕获。您想要正则表达式捕获这些组吗?如果需要,请给出一个示例输入和所需输出,这样我就可以提供一个经过测试的正则表达式。@Saibot本质上是的。我已经编辑了我的问题,以包括示例输入和输出内容,说明我将做什么n这两个txt文件。感谢您对此提供的任何见解!就这样!我非常感谢您的帮助。我一定会学习演示,从您的专业知识中学习每个部分的含义。Regex当然是一个强大的工具!享受!:)如果您想学习,我还可以解释表达式。是的,那太好了!据我所知,这些字母运算符在捕获文本时各有其作用,但它们如何共同工作以给出您找到的最终结果?也感谢您的解释。我肯定对发生的事情有更深的了解!