【问题标题】:How do I capture a price with thousand and decimal separator with regex in python如何在python中使用正则表达式捕获千位和小数分隔符的价格
【发布时间】:2021-12-23 11:11:42
【问题描述】:

我目前有一个可以运行的代码,但唯一的缺陷是我没有以最佳方式设置正则表达式 python 代码。

原始文本包含数以千计数十万和数百万的数量。没有小数。我的意思是它有小数但总是“,00”。

文本中的示例行:

债务 1 of 2,金额为:$ 58.610,00,未付

现在使用以下代码可以很好地捕获数百万但少于 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 美元

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

问候

【问题讨论】:

    标签: python regex matching re


    【解决方案1】:

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

    \$\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
    

    【讨论】:

    • 你就是那个男人!这工作完美!非常感谢。我很感激
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    相关资源
    最近更新 更多