首页 > 解决方案 > 或最后一个词在单个正则表达式中的条件不起作用python

问题描述

我正在将 pdf 银行对帐单转换为文本文件并逐行读取文本文件并使用正则表达式将交易转换为 JSON 格式。现在在文本中进行交易,一些交易的金额在同一行,而一些交易的金额在不同的行。想写一个可以区分两行的正则表达式。下面给出了输入字符串,我一一得到。

15/08/2019       UPI/922722731244/PAYMENT

01/08/2019       MAB CHARGES FOR JUN19                         4.94

尝试的正则表达式是

\s*(?P<'+DATE_STR+'>\d{2}/\d{2}/\d{4})\s+(?P<'+DESCRIPTION_STR+'>[\s\S\d\D\w\W]*)\s(?P<'+AMOUNT_STR+'>([\d.-]+))

我希望 AMOUNT_STR 的输出处于或状态,结果应该是这样的。

我想要一个应用于第一个语句的单个正则表达式将输出作为 DATE_STR = '15/08/2019 ' DESCRIPTION_STR = 'UPI/922722731244/PAYMENT' (对于第一个字符串)
,当应用于第二个语句时,输出为

DATE_STR = '01/08/2019' DESCRIPTION_STR = '19 月的 MAB 费用' AMOUNT_STR= '4.94'

标签: pythonregex

解决方案


终于得到了解决方案。在正则表达式中,AMOUNT_STR 正则表达式在条件下最后用“。”检查数字。(点)因为金额可以包含“,”(逗号)所以我使用的正则表达式是

\s*(?P<' + DATE_STR + '>\d{2}/\d{2}/\d{2})\s(?P<' + DESCRIPTION_STR + '>(. ?)(?= \d+\, \d*.\d+|$))(?P<' + AMOUNT_STR + '>\d+\, \d .\d+)*


推荐阅读