2016-07-28 110 views
0

我想找到所有對被分隔的單詞「:」 讓我舉例說明:分詞的特殊字符

aa:bbb 

(輸出)MATCH1 => AA; BBB

aa: bbb ccc 

(輸出)MATCH1 => AA; bbb ccc

aaa: bbbbb ccc ddd: eeee 

(輸出)match1 => aaa; bbbb ccc (輸出)match2 => ddd; EEE


我發現2的正則表達式:

1)\s*([a-z0-9]+)+\s*\:\s*([a-z0-9]+)+

2)(.*)\:(.+?)(?=[a-z0-9]*\s*:)

第一找到的所有一次出現但在這種情況下,例如(字不起作用由空格分隔像bbbbb ccc):

aaa: bbbbb ccc 

但工作在t他的情況:

aa: bbb ccc:dd eeee:fff 

第二沒有發現在這種情況下所有的次數,但工作:

aaa: bbbbb ccc 
+1

根據你的例子,你爲什麼要用正則表達式呢?請閱讀[爲什麼不應該在有更好的方法時使用正則表達式](http://programmers.stackexchange.com/questions/113237/when-you-should-not-use-regular-expressions)。用常規的split(':')'動作來分割示例是首選。 –

回答

0

要使用正則表達式的回答,儘管它可能不會做到這一點的最好辦法:

(\w+ *):([\w ]+)(?!\w* *:)

Demo here

我做兩個C一組之後,1個在:之前,一個在之後。

爲了確保我的第二個捕獲組沒有采用下一個捕獲的「關鍵」,我使用了負向預測來確保我無法匹配剛纔的關鍵字的格式(之前的任何單詞或空格字符一個:)

完全匹配的鑰匙我用\w+ *在免得一個字符之後或一個或更多的空間,爲負先行\w* *:不被肯定,我不能匹配單個:,也不a:a :

對於我使用的字符類的值,任何單詞字符(\wa-zA-Z0-9_ )或空間至少一次。