使用Python和pdf2text我试图从我收到的4000多页单页PDF文件中提取邮件和邮件 - 遗憾的是我无法访问原始文件,因此在创建文件时无法调整。
我的最终目标是使用Postalcode_ExistingFilename.pdf重命名所有PDF文件,以便我可以为邮政网络对它们进行排序。我还需要将同一客户的PDF文件合并到一个文件中,但这是另一个问题。
在PDF中,我们有“亲爱的”字样,邮政编码在此之前(尽管有几行):
04 Jul 2018
Mr Sam Sample
123 Sample Street
Sample Suburb
Sample City 1234
Dear Sam
我已经设法让它合作
(\d+)\s*Dear
直到地址行数改变导致转换为文本以在Dear和Postcode之间添加一段文本。
04 Jul 2018
Mr Sam Sample
123 Sample Street
Sample City 1234
PO Box 1234
Sample City
Phone: 01234567
Fax: 01234568
Email: [email protected]
Website: email.com
Dear Sam
我试图从顶部开始工作并寻找不包括2018
的前4位数字,但是任何4位数的街道数字都在匹配,这不是我追求的。
你能给出的任何建议都很棒。
您可以使用正则表达式:
\b\d{4}$\b(?<!2018)
\b
打开单词边界。\d{4}$
在行尾匹配正好四位数。\b
关闭单词边界。(?<!2018)
负面观察,检查四位数字组不是2018年。你可以试试here。正则表达式基于根据注释的假设,即邮政编码发生在行尾。如果您期望不同的年份,您可以简单地调整负面观察以应对额外的年份。例如:
(?<!2018|2017)
将不包括2017年或2018年。(?<!201[0-9])
将排除2010年至2019年的年份。根据您的Python版本,您可能需要为行断言的开始和结束指定re.MULTILINE标志。
>>> str = """04 Jul 2018
Mr Sam Sample
1235 Sample Street
Sample City 1234
PO Box 1237
Sample City
Phone: 01234567
Fax: 01234568
Email: [email protected]
Website: email.com
Dear Sam"""
>>>re.findall(r"\b\d{4}$\b(?<!2018)",str,re.MULTILINE)
['1234', '1237']
如何尝试匹配行尾的4位数字,不包含日期的行(即以数字开头的行)?
import re
re.findall(r'^[^\d].*?\s+(\d{4})\s*$', data, re.MULTILINE)
# ['1234']