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

时间:2012-11-06 13:30:15

标签: regex floating-point integer

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

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

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

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

以下是应该匹配的内容的示例:

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

2 个答案:

答案 0 :(得分:9)

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

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

Additional reading.

这是一个略微优化的版本:

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

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

答案 1 :(得分:0)

这个应该符合您的需求:

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