2015-12-29 46 views
1

我想匹配正則表達式,使得一個組中的符號(+或 - )和另一個組中的數字。它可以可能的是,圖來自沒有任何符號(+或 - )需要regex.match組中的值

[-] 87.90 
[+] 87.78 
(-) 87.90 
(+) 87.78 
    89 
-89.56 
- 89.98 

我已經使用以下正則表達式

^\W*(\-|\+|)\W*(\d+(\.\d+)?) 

由此我在第1組 如果得到空我用

^\W*(\-|\+)\W*(\d+(\.\d+)?) 

然後第三個數字將不匹配。所以總之我想用(+或 - )或沒有任何符號來匹配數字。

+0

做你圓括號已被抓獲呢? –

回答

0

組1爲空,因爲\W*貪婪地匹配所有非單詞字符,即所有的括號和符號。

你應該在模式指定文字的括號字符類將是一個更自然的結構,以匹配無論是+-

(?:\(?([-+])\)?)?\p{Zs}*(\d+(\.\d+)?) 

regex demo(如果你需要一個完整的字符串匹配,在開始時使用^,在模式結束時使用$)。

正則表達式匹配:

  • (?:\(?([-+])\)?)? - 任選的非捕獲組((?:...))一個匹配(任選,隨後進行加或減(組1),然後通過任選的)
  • - 零個或多個空白符號
  • (\d+(\.\d+)?) - (第2組)一個或多個數字,後跟一個可選捕獲組(組3),該可選捕獲組(組3)匹配一個後跟一個或多個數字的週期。

結果:

enter image description here

+0

我編輯了我的問題。如果值是-89.98,那麼這將不起作用。 –

+0

只要在組1內使用'('和')''選項:'(?:\(?([ - +])\)?)?'。另一種方法:'(?:\((? [ - +])\)|(?)[ - +])?'。 –

+0

是的,但如果有[89.76]這樣的情況,那麼它應該匹配,這就是爲什麼我採取了\ W * –