5

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

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

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

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

这是应该匹配的示例:

3.3
.3
5E6
.2e-14
7E+3
4.
5.E2
1e2
4

2 回答 2

9

如果您的正则表达式支持前瞻,请在数字结尾之前要求一个浮点字符:

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

附加阅读。

这里还有一个稍微优化的版本:

[+-]?(?=\d*[.eE])(?=\.?\d)\d*\.?\d*(?:[eE][+-]?\d+)?

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

于 2012-11-06T13:32:56.350 回答
0

这应该适合您的需求:

[+-]?([0-9]+\.([0-9]+)?|\.[0-9]+)([eE][+-]?[0-9]+)?
于 2012-11-06T13:36:43.427 回答