【问题标题】:Regular expression to match floats only [duplicate]仅匹配浮点数的正则表达式[重复]
【发布时间】:2015-07-18 02:25:37
【问题描述】:

我需要做一个正则表达式来匹配浮点数,我得到的是以下内容:

[\-\+]?[0-9]*(\.[0-9]+)?

但这场比赛还有以下 123123132 , 1994 年 5 月 3 日

我只需要匹配小数点的数字

【问题讨论】:

  • “仅浮动”是什么意思?您需要小数点吗?
  • 是的,我需要小数点
  • 删除最后一个?,并在需要时使用^$ 锚。
  • 不要在括号内转义 -+- 不是一个范围,因为它在开头,+ 不需要转义)。将* 更改为+

标签: regex


【解决方案1】:

这是一个处理现有指数的正则​​表达式:

[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?

Debuggex Demo

此外,您应该强制匹配孔字符串以避免在您的日期值内匹配。

^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$

顺便说一下,这里有一个关于使用正则表达式匹配浮点数的好教程:http://www.regular-expressions.info/floatingpoint.html

【讨论】:

    【解决方案2】:

    您的正则表达式对于您的目的几乎是正确的。

    它找到123123132,因为最后一部分是可选的。删除 ? 即可解决此问题。

    [-+]?[0-9]*(\.[0-9]+)
    

    通过该调整,它可能仍会在 .12/39/3239 等字符串中找到匹配项,如果您不希望发生这种情况,请通过插入 ^$ 插入强制匹配整个字符串:

    ^[-+]?[0-9]*(\.[0-9]+)$
    

    【讨论】:

    • 谢谢,正是我想要的
    【解决方案3】:

    怎么样:

    ([+-]?[0-9]*\.[0-9]*)
    

    你可以看到它在工作here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-04
      • 2022-11-16
      • 2015-03-17
      • 2014-02-25
      • 1970-01-01
      相关资源
      最近更新 更多