【问题标题】:Regex, match number with hyphen and without正则表达式,匹配带连字符和不带的数字
【发布时间】:2016-07-15 01:23:32
【问题描述】:

我有这个字符串[lat:50.000],我需要从中取出数字,但有时它前面可能有一个连字符,因为它可能是一个负数。

我现在有这个正则表达式[\-]\d+(\.\d{1,10})? 但是它只会匹配前面有连字符的数字,我需要一个正则表达式来匹配它有和没有连字符。所以我会留下50.000 或在某些情况下-2.000

希望这是有道理的。

【问题讨论】:

    标签: regex


    【解决方案1】:

    您需要一个量词来说明连字符是可选的:

    [\-]?\d+(\.\d{1,10})?
    

    你也可以稍微改进一下表达式,把连字符从字符类中去掉(因为它只是一个字符):

    -?\d+(\.\d{1,10})?
    

    【讨论】:

    • 虽然不需要字符类。可能只是-?
    • 是的;我试图不打扰原来的正则表达式,所以我添加了另一个版本。
    【解决方案2】:

    使用这个正则表达式:\-?\d+\.\d{1,10}

    【讨论】:

    • 连字符甚至不需要转义。
    【解决方案3】:

    在字符或组后面的question mark quantifier? 表示它是可选的:

    -?\d+(\.\d{1,10})?
    

    这相当于使用{0,1} 量词。

    【讨论】:

    • 你也可以去掉连字符的转义符。
    • 谢谢,是去掉了OP的原字符组,却忽略了逃跑的结果。
    【解决方案4】:

    还有一个:

    (-?\d[\d.,]+)
    # - or not (optional)
    # followed by at least a digit
    # followed by digits, dots and commas
    

    a demo on regex101.com

    【讨论】:

      【解决方案5】:

      这是一个简单的表达式

      \-?\d*\.?\d*
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-17
        • 1970-01-01
        • 2019-05-28
        • 2018-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多