【问题标题】:How do i write a regex for capturing decimal numbers?如何编写用于捕获十进制数的正则表达式?
【发布时间】:2011-05-18 03:13:11
【问题描述】:

我需要编写一个正则表达式,它将从示例文本中捕获以下所有数字:

2.5
5
0.2
.5

假设它在小数点两侧不超过 2 位,我使用什么正则表达式?

谢谢。

【问题讨论】:

    标签: regex


    【解决方案1】:

    这应该可行。

    (\d*\.?\d+)
    

    意思是

    • (开始捕获组
    • \d* 任意数字零次或多次
    • \.? 一个句点零次或一次(即它是可选的)
    • \d+ 任意数字一次或多次
    • )结束捕获组

    它将匹配您列出的所有号码并在$1 中捕获它们。

    【讨论】:

    • 可以去掉括号,使用$0获取整个正则表达式的匹配内容。
    • 这将匹配123.456,但 OP 希望小数点两侧不超过 2 位。
    • @Tim 感谢您的提示。我忘记了$0,因为我倾向于发现我通常只想捕获一部分正则表达式。
    • @M42 我想我的阅读方式与您的不同。我读到它是说输入在小数点的两边永远不会超过 2 位。生病添加第二个正则表达式来澄清。
    • @Jeff:你可能是正确的,因为 OP 已经接受了答案 :-)
    【解决方案2】:

    这个正则表达式可以完成这项工作(即小数点两侧不超过 2 位)

    ^(?:\d{0,2}\.\d{1,2})$|^\d{1,2}$
    

    解释:

    ^               # Begining of the string
      (?:           # begining of NON capture group
        \d{0,2}     # matches 0,1 or 2 digits
        \.          # decimal point
        \d{1,2}     # 1 or 2 digits
      )             # end of non capture group
    $               # end of string
    
    |               # OR
    
    ^               # Begining of the string
      \d{1,2}     # 1 or 2 digits
    $               # end of string
    

    这个正则表达式将匹配: 2.5, 5, 0.2, .5 但不是: 123.456, 256

    【讨论】:

      【解决方案3】:
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-28
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-04
      相关资源
      最近更新 更多