我目前有一个代码可以运行,但唯一的缺陷是我没有以最佳方式设置正则表达式 python 代码。
原文包含的金额有几千几十万几百万。没有小数点。我的意思是它有小数但总是“,00”。
文本中的示例行:
Debt 1 of 2 for an amount of: $ 58.610,00, Unpaid
现在,使用以下代码可以捕获数百万的罚款,但不到 100,000 的则跳过一位数字。
regex = r"(\d+).(\d+).(\d+),(\d+)"
match = re.search(regex, line, re.MULTILINE)
print = "$"+match.group(1)+match.group(2)+match.group(3)
它捕获如下:
$5860
但是目标是这样的:
$58610
如果金额以百万为单位,则可以很好地捕获,我必须这样做,因为我使用的货币金额很大。所以我不断地管理这些数量。
问候
最佳答案
您可以使用以下正则表达式来提取预期的匹配项,然后删除千位分隔符:
\$\s?(\d{1,3}(?:\.\d{3})+)(?:,\d+)?(?!\d)
您需要获取第 1 组值,从中删除句点并在开头重新附加 $
。请参阅regex demo 。 详细信息:
\$
- 一个$
字符\s?
- 可选的空格(\d{1,3}(?:\.\d{3})+)
- 第 1 组:一到三位数字,然后出现一个或多个(因为您只想要匹配数千个及更多)的.
和三位数字(?:,\d+)?
- 逗号和一个或多个数字的可选序列(?!\d)
- 右侧不允许有数字。
请参阅Python demo :
import re
text = 'Debt 1 of 2 for an amount of: $ 58.610,00, Unpaid'
match = re.search(r'\$\s?(\d{1,3}(?:\.\d{3})+)(?:,\d+)?(?!\d)', text)
if match:
print(f"${match.group(1).replace('.', '')}")
# => $58610
关于python - 如何在 python 中使用正则表达式捕获带有千位和小数分隔符的价格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69920293/