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

标签 python regex matching python-re

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

相关文章:

javascript - 验证 javascript/jquery 中的 url 格式

templates - *和XSLT中的node()之间的区别

python - 从字符串中创建元组列表,,

python - Django管理面板将None类型数据转换为空字符串

python - 在 Windows 上调整 Python 控制台窗口大小的问题

javascript正则表达式,立即拆分和匹配?

javascript - 使用正则表达式和 jQuery 使输入接受一个字母

python - datetime 如何理解第 53 周?

Python数据帧检查列数据帧中的值是否在另一个数据帧中报告的值的范围内

sql - 如果我将一个文本字符串与多个列进行匹配,是否有一种简单的方法可以知道哪些列匹配?