正则表达式匹配浮点数

ron*_*nik 12 regex

我有这种模式:

[0-9]*\.?[0-9]
Run Code Online (Sandbox Code Playgroud)

它匹配数字但它也匹配3.5.4:

  1. 3.5
  2. 0.4

如何解决(这个输入不应该匹配)?
更新:
这也适用于输入:1 3.5.4 10

1.2.是不允许的
.3是允许的

任何不是numer的字符都是不允许的,例如:a1 2.4f 3. 45,67!

kev*_*kev 12

要匹配json数字:

^[-]?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?$
Run Code Online (Sandbox Code Playgroud)

JSON号码

使用此正则表达式匹配.123:

^[-]?((0|[1-9][0-9]*)(\.[0-9]+)?|\.[0-9]+)([eE][+-]?[0-9]+)?$
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 10

海报评论后更新的答案:

使用lookahead/lookbehind确保前后字符是空格:

这是一个与您的版本非常匹配的版本,但不会进行部分匹配:

(?:^|(?<=\s))[0-9]*\.?[0-9](?=\s|$)
Run Code Online (Sandbox Code Playgroud)

对于这两个示例,当在字符串上运行时,1 2.3.4 5.6它仅匹配15.6.


cle*_*tus 7

您必须决定是否要接受不带前导零的数字(例如.123).如果你不这样,那么正则表达式很简单:

^-?[0-9]+(\.[0-9]+)?$
Run Code Online (Sandbox Code Playgroud)

如果你这样做,那就有点复杂了:

^-?(?:[0-9]+|[0-9]*\.[0-9]+)$
Run Code Online (Sandbox Code Playgroud)

两者都假定小数点必须后跟至少一个数字.如果您不接受负数,那么领先-?是不必要的.