【问题标题】:Regex to match dollar sign, money, decimals only正则表达式仅匹配美元符号、货币、小数
【发布时间】:2017-09-20 02:48:53
【问题描述】:

正则表达式

y = [X: $1.19] [Y: $5.29] [Z 999/1000]
x = re.findall(r"\$[^ ]+", y)

匹配

$1.19] 
$5.29]

预期匹配

$1.19
$5.29

如何调整我的正则表达式以匹配可能包含小数且必须包含美元符号的金额? - 这些值可以改变。例如:

$x.xx # 'x' representing a number

【问题讨论】:

    标签: python regex python-2.7


    【解决方案1】:

    您可以简单地使用以下正则表达式进行搜索。

    正则表达式: \$\d+(?:\.\d+)?

    说明:

    \$: 确保美元符号后跟

    \d+: 多位或一位数

    (?:\.\d+)?:小数部分可选

    Regex101 Demo

    【讨论】:

    • 解释中的小错误:不匹配“多于一位”,匹配一位或多位。
    【解决方案2】:

    只需将否定字符类中的空格替换为右括号即可:

    In [37]: x = re.findall(r"\$[^\]]+", y)
    
    In [38]: x
    Out[38]: ['$1.19', '$5.29'] 
    

    【讨论】:

    • 请避开],这把我吓坏了。如果未来版本的 python 支持空的否定字符集,你的模式就会被打破。
    • @Rawing :-) 好的,给你!
    • 太好了,非常感谢!
    • @Kasrâmvd 将 re.match()$ 一起工作。例如if re.match(r"\$","ff $ ff") : print ('yes') 不会打印。通过使用r"\$""\$"
    【解决方案3】:

    这种情况下的最佳正则表达式是

    \$\d+(?:.(\d+))?
    

    说明

    \$ 表明它应该以美元符号开头

    \d+匹配小数点前的所有数字

    (?:.(\d+)) 匹配小数点后是否有任何数字。例如,在 $1.12 中,它将匹配 .12 并捕获 12(小数点后的部分)。如果钱是 $1.,它只会匹配 $1,它不会匹配

    Regular Expression tester, library, tutorials and cheat sheet.

    【讨论】:

      【解决方案4】:

      [\$ ]+?(\d+([,\.\d]+)?)

      说明

      [\$ ]+?接受美元,将\$换成你需要的货币

      (\d+([,\.\d]+)?) 带有逗号和句点的数字重复任意次数。无所谓英国编号系统或 R

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-09-29
        • 1970-01-01
        • 2020-07-16
        • 1970-01-01
        • 2016-11-03
        • 2014-11-16
        • 2012-11-30
        相关资源
        最近更新 更多