2014-02-13 42 views
1

我想使用正則表達式分割字符串。例如:使用正則表達式在第一個空格/冒號分隔/分隔字符串

12 13: 14: 15 => One-12, Two-13 , Three-14: 15 

我將嘗試使用下面的正則表達式:

^(?P< one>.*)\\s(?P< two>.*):\\s(?P< three>.*)$ 

所以,在我看來,「一」應該是之前先「空」的值(\ S),然後直到下一個冒號(:)的值應該是「兩」,之後的所有內容都應該是「三」。

但輸出我得到的是:一12 13 :,二14三15

注:這是Golang類型的正則表達式,但我想這是一個普遍的正則表達式的問題。請幫助我解決這個問題。

+1

注意:去正則表達式與許多語言相比是有限的,因爲它們沒有反向引用或任何使其行爲難以預測的 –

+3

這就是說,我仍然不明白這個問題:\ –

+0

OP,也許你可以在[遊樂場](http://play.golang.org/p/3VsQMI4Rx5)中建立一個樣本,並準確確定您期望的確切輸出? –

回答

2

問題可能是它試圖爲最左邊的模式做最長的匹配。如果是這樣的情況下,嘗試改變原來的

^(?P< one>.*)\\s(?P< two>.*):\\s(?P< three>.*)$

here......^ 

到不允許這些字符中的冒號 - [^:]如果像普通SED正則表達式。爲了安全起見,如果一行中可能有兩個以上的冒號,那麼也要在第二部分上做。

^(?P<one>[^:]*)\\s(?P<two>[^:]*):\\s(?P<three>.*)$

編輯: 這似乎根據this tester賺取差價,改變\\s只是\s和消除在圖案名原空格之後。同樣here

相關問題