【问题标题】:Regular expression does not match a number with e+ or e-正则表达式不匹配带有 e+ 或 e- 的数字
【发布时间】:2011-07-14 13:18:26
【问题描述】:

我想用正则表达式匹配任何数字。我写了这个表达式(为了可读性添加了空格):

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

这需要匹配以下形式之一的任意数字:

  • 12345
  • 12.345
  • .12345
  • 12345.
  • 12e-34512E-345
  • 12e+34512E+345

它匹配前四个符号,但后四个(带有 e- 和 e+ 的符号)不匹配。我做错了什么?提前致谢。

【问题讨论】:

  • 添加空格以提高可读性也会隐藏可能会破坏内容的空格。
  • @Wooble 实际表达式中没有空格。

标签: regex numbers


【解决方案1】:

专注于表达的那部分:

(e|E)(\+|\-)[0-9](\.[0-9])?

您只允许在e|E 之后一个 数字,可选地后跟一个. 和一个 其他数字。

【讨论】:

  • 确实是这个问题。没注意到。谢谢!
【解决方案2】:

也许是最后的斜线点'\.'。

此外,没有 *,因此它只允许在指数中使用一位或两位数。

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

【讨论】:

    【解决方案3】:

    您正在寻找 [eE] 之后的 1 位数字。改变 ?到一个 +

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

    【讨论】:

      【解决方案4】:

      因为正则表达式匹配12.34e+4.5 形式的数字。 [0-9](\.[0-9])? 部分应更改为[0-9]+

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

      另见How to detect a floating point number using a regular expression

      【讨论】:

        【解决方案5】:

        使用这个:\d+[eE][+-]\d+|\d+\.?\d*|\.\d+

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-09-22
          • 2018-04-16
          • 1970-01-01
          • 1970-01-01
          • 2017-03-19
          • 2015-08-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多