Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用Python正则表达式自动化文本提取_Regex_Excel_Python 3.x_Automation - Fatal编程技术网

Regex 使用Python正则表达式自动化文本提取

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

我正在从事一个自动化项目,该项目涉及使用python脚本解析txt文件,并重复提取关键字后面的3行数据。为了提供上下文,txt文件包含数百个形式相同的字母,除了末尾的名称和地址之外。我的最终目标是逐步完成所有这些表单字母,提取姓名和地址,并使用openpyxl将其放入Excel电子表格中。下面是一个txt文档的示例

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当然是一个强大的工具!享受!:)如果您想学习,我还可以解释表达式。是的,那太好了!据我所知,这些字母运算符在捕获文本时各有其作用,但它们如何共同工作以给出您找到的最终结果?也感谢您的解释。我肯定对发生的事情有更深的了解!