我有一段文字:
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.
。如何解决此问题,以便使用单一模式在两种情况下正确提取信息
模式:
将匹配任何以小数结尾的字符串,因此在这种情况下,它会将字符串返回到末尾的电话号码。如果可能,您可以尝试使模式更具体一些,例如创建一个包含“inr”的模式,或者可能单独获取所有数字,例如使用:
它将返回在小数点之前和之后有数字的数字列表
资料来源: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]+)'
输入文本
使用以下正则表达式:
输出:
相关问题 更多 >
编程相关推荐