Python在短语或单词组之后提取信息

时间:2018-01-08 17:28:56

标签: python regex extract

我正在尝试从PDF中提取信息。

简单搜索工作:

filecontent = ReadDoc.getContent("c:\\temp\\pdf_1.pdf")
match = re.search('Document ID: (\d+)', filecontent)
if match:
    docid = match.group(1)

但是当我想搜索一个长短语时,例如 我想提取999,999.00美元,这可能会出现在文件中,例如"总累积付款(USD)$ 999,999.00"或"累计付款总额$ 55587323.23"。请注意,文本中存在差异,我需要使用某种模糊搜索,找到句子,以某种方式从那里提取$。

同样,我还需要在短语/单词之间提取一些日期,数量,金额,金钱。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

我认为这应该做你想要的:

import re

textlist = ["some other amount as $32,4545.34 and Total Cumulative Payment (USD) $999,999.00 and such","Total cumulative payment $55587323.23"]

matchlist = []

for text in textlist:
    match = re.findall("(\$[.\d,]+)", text)
    if match:
        matchlist.extend(match)

print(matchlist)

结果:

['$32,4545.34', '$999,999.00', '$55587323.23']

正则表达式是寻找$并抓住。并且数字到下一个空格。根据您正在解析的其他类型的数据,可能需要进行调整,我假设您只想捕获句点,逗号和数字。

更新

现在可以找到任意数量的事件并将它们全部放在列表中

答案 1 :(得分:0)

这样的事情可以通过正则表达式完成:

import re

source = 'total cumulative payment $2000.00;   some other amount $1234.56.    Total Cumulative Payment (USD) $5,600,000.06'
matches = re.findall( r'total\s+cumulative\s+payment[^$0-9]+\$([0-9,.]+)', source, re.IGNORECASE )
amounts = [ float( x.replace( ',', '' ).rstrip('.') ) for x in matches ]

这将与您给出的两个具体示例相匹配。但是,您还没有充分了解匹配标准应该有多松散,或者规则是什么。如果源文档在单词"累积"中有拼写错误,则上述解决方案将丢失金额。或者,如果金额显示为而没有美元符号。它还允许任何数量的介入文本在"总累积付款"和美元金额(所以你会从source = "This document contains information about total cumulative payment values, (...3 more pages of introductory material...) and by the way you owe me $20."得到假阳性)现在,这些东西可以调整和改进 - 但前提是你知道什么是重要的,什么是不重要的,并收紧相应地说明问题。