正则表达式与e +或e-的数字不匹配

时间:2011-07-14 13:18:27

标签: regex numbers

我希望将任何数字与正则表达式匹配。我写了这个表达式(添加了空格以便于阅读):

( ([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 +)符号不匹配。我做错了什么?提前谢谢。

5 个答案:

答案 0 :(得分:3)

关注表达的那一部分:

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

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

答案 1 :(得分:1)

也许这是最后的斜线'\。'。

此外,没有*所以它只允许指数中的一个或两个数字。

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

答案 2 :(得分:1)

您在[eE]之后寻找1位数字。改变?到了+

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

答案 3 :(得分:0)

因为正则表达式匹配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

答案 4 :(得分:0)

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