如何在 python 中使用正则表达式捕获带有千位和小数点分隔符的价格

How do I capture a price with thousand and decimal separator with regex in python

我目前有一个代码可以工作,但唯一的缺陷是我没有以最佳方式设置正则表达式 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)

它是这样捕获的:

60

但是目标是这样的:

610

如果金额以百万为单位,它会很好地捕获,我必须这样做,因为我使用的货币数量很大。所以我经常管理这些数量。

此致

您可以使用以下正则表达式来提取您预期的匹配项,然后删除千位分隔符:

$\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('.', '')}")

# => 610