2011-10-17 21 views
1

我不得不將字符串拆分爲他的數字。只有正則表達式中的數字,負數也

例如字符串看起來像這樣:

VAR_1123 Var_G -12.34 VAR-14.34 12.4 12 -234 

結果我想:

-12.34, 
12.4 
12 
-234 

我試試這個正則表達式:

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

但結果包括也是1123和-14.34。

如何排除所有具有下劃線或字符的數字?

爲了測試我使用這個鏈接:

http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx

回答

0
  • 使用括號,而不是一個字符類組點和最後一位數字。使用?:表示非捕獲匹配。
  • [\-]改爲-
  • 使用lookaheads或lookbehinds來檢查周圍的空白。

所以最終的正則表達式如下:

(?<=\s|^)-?[0-9]+(?:\.[0-9]+)?(?=\s|$) 

看到它聯機工作:ideone

+0

但是,如果在測試字符串的開頭有一個有效的數字,將會出現不匹配。 – Fischermaen

+0

謝謝,修復它。 –

0

你唯一需要的另外的標準是數字應該面前有空白,所以這應該工作 - 我只是說

\s[\-]?[0-9]+[\.[0-9]+]?

一個\s之前你的正則表達式。它可以按照你所要的例子工作。

0

使用這種模式,而不是

([$\s][\-]?[0-9]+[\.[0-9]+]?) 

編輯 - 更改括號,這樣\ s沒有抓到。

[$\s]([\-]?[0-9]+[\.[0-9]+]?) 
1
\s\-*\d\S*\d 

前綴的空白,可能產生的負面,手指與界之間可能的字符的限制。工程,但顯然可以改善,以涵蓋更多案件。