2012-11-06 106 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會希望匹配,但是這個問題並不清楚,猜猜我應該在問題上發表上述評論,而不是在你的回答中發佈。 –