正则表达式匹配浮点数而不是整数

mrj*_*min 5 regex floating-point integer

我有一个问题是定义一个匹配浮点数但不识别整数的正则表达式.

我有以下正则表达式,它匹配浮点数.

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

如何修改上面的表达式,使其与整数不匹配?

以下是应该匹配的示例:

3.3
.3
5E6
.2e-14
7E+3
4.
5.E2
1e2
Run Code Online (Sandbox Code Playgroud)

Mar*_*der 9

如果你的正则表达式支持先行,请在数字结尾前需要一个浮点字符:

((\+|-)?(?=\d*[.eE])([0-9]+\.?[0-9]*|\.[0-9]+)([eE](\+|-)?[0-9]+)?
Run Code Online (Sandbox Code Playgroud)

补充阅读.

这里也是一个稍微优化的版本:

[+-]?(?=\d*[.eE])(?=\.?\d)\d*\.?\d*(?:[eE][+-]?\d+)?
Run Code Online (Sandbox Code Playgroud)

我们从一个可选+或开始-.然后我们需要其中一个字符.,e或者E在任意数量的数字之后.然后我们还要求在字符串之前或之后至少有一个数字.我们只匹配数字,可选.和更多数字.然后(完全可选)一个e或一个E和可选的+-然后一个或多个数字.