使用Python正则表达式从文本中提取信息

2024-04-26 03:13:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一段文字:

text = 'dear customer your account xx9052 has been debited with inr25697.50 on 23-nov-18 info 
bil001582495861 icici bank the available balance is inr 363.25'

在这里,我试图从文本中提取诸如账号、金额、日期和可用余额等信息

我通过以下正则表达式尝试了这一点:

pattern = 'your account (.*) has been debited with (.*) on (.*) info (.*) available balance is (.*\d)$'

if (re.search(pattern, text, re.IGNORECASE)):
    print(re.search(pattern, text, re.IGNORECASE).group(1)), \
    print(re.search(pattern, text, re.IGNORECASE).group(2)), \
    print(re.search(pattern, text, re.IGNORECASE).group(3)), \
    print(re.search(pattern, text, re.IGNORECASE).group(5))

我得到了预期的结果:

xx9333
inr 25697.50
23-nov-18
inr 363.25

但我面临着这个正则表达式模式的问题,当文本稍微修改时:

text = 'dear customer your account xx9052 has been debited with inr 25697.50 on 23-nov-18 info bil 001582495861 icici bank the available balance is inr 363.25 for dispute call 04033667777'

使用相同的正则表达式可以得到以下结果:

xx9333
inr 25697.50
23-nov-18
inr 363.25 for dispute call 04033667777

余额是用额外的信息提取的,而它应该只有inr 363.25.。如何解决此问题,以便使用单一模式在两种情况下正确提取信息


Tags: textresearchyourwithgroupaccountnov
3条回答

模式:

(.*\d)$

将匹配任何以小数结尾的字符串,因此在这种情况下,它会将字符串返回到末尾的电话号码。如果可能,您可以尝试使模式更具体一些,例如创建一个包含“inr”的模式,或者可能单独获取所有数字,例如使用:

re.findall('\d*\.?\d+',text)

它将返回在小数点之前和之后有数字的数字列表

资料来源:https://www.tutorialspoint.com/Extract-decimal-numbers-from-a-string-in-Python

我建议单独提取信息片段,而不是使用单一模式

例如: 要获取金额,可以使用正则表达式模式-([\d]+\.[\d]+) 它将从一个必需的字符串中获取十进制数,您可以创建regex来获取其他信息,如帐号和日期

更新:
如果要使用相同的模板,请将正则表达式更改为

pattern = 'your account (.*) has been debited with (.*) on (.*) info (.*) available balance is (.*[\d]+\.[\d]+)'

输入文本

text = 'dear customer your account xx9052 has been debited with inr 25697.50 on 23-nov-18 info bil 001582495861 icici bank the available balance is inr 363.25 for dispute call 04033667777'

使用以下正则表达式:

r('your account (.*) has been debited with (.*) on (.*) info bil (.*) icici bank the available balance is (.*[\d]+\.[\d]+)')

输出:

xx9052
inr 25697.50
23-nov-18
001582495861
inr 363.25

相关问题 更多 >