2012-11-06 57 views
5

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

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

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

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

这里是什么应该匹配一个例子:

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

请确认:。只'#.','##','#','#.E#','#·E·'和'。#e#'应该匹配? – sp00m

+0

是的,多数民众赞成在.. – mrjasmin

+0

见http://www.regular-expressions.info/floatingpoint.html –

回答

9

如果您正则表达式的味道支持向前看符号,需要浮点字符中的一个数结束前:

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

Additional reading.

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

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

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

+0

一个清洁正则表达式版本,没有狂放'('在开始 - ['[+ - ]?(?= \ d * [.EE])([0-9] + ?\ [0-9] * |。?\ [0-9] +)([EE] [+ - ] [0-9] +)'](https://regex101.com/r/7xruwB/1) –

0

这应该满足您的需求:

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

1e2''应该匹配吗? –

+0

@MarkDickinson'1e2'不会匹配。1.e2'和'.1e2'将会通过。 – sp00m

+0

是的,这就是为什么我问.'1e2'通常是有效的因为我希望OP会希望匹配,但是这个问题并不清楚,猜猜我应该在问题上发表上述评论,而不是在你的回答中发布。 –