2013-02-13 230 views
5

我正在試圖找到正確的正則表達式語法,用於匹配和分割由雙括號包圍的單詞。正則表達式匹配包含在雙括號中的單詞

const string originalString = "I love to [[verb]] while I [[verb]]."; 

我試圖

var arrayOfStrings = Regex.Split(originalString,@"\[\[(.+)\]\]"); 

但它並沒有正常工作。我不知道我做錯了

我想arrayOfStrings出來,像這樣

arrayOfStrings[0] = "I love to " 
arrayOfStrings[1] = "[[verb]]" 
arrayOfStrings[2] = " while I " 
arrayOfStrings[3] = "[[verb]]" 
arrayOfStrings[4] = "." 

回答

8

我認爲這是你所需要的。

string input = "I love to [[verb]] while I [[verb]]."; 
string pattern = @"(\[\[.+?\]\])"; 

string[] matches = Regex.Split(input, pattern); 

foreach (string match in matches) 
{ 
    Console.WriteLine(match); 
} 
+0

這將刪除括號內的詞,這不是用戶想要的。 – JDB 2013-02-13 20:15:30

+0

Cyborgx37,括號不會被刪除。它將返回到勞倫斯伯克所要求的。 – 2013-02-13 20:28:48

+0

你是對的。我的錯誤 - 顯然我誤解了Regex.Split函數。不幸的是,當我嘗試刪除我的downvote時,我收到錯誤消息。 – JDB 2013-02-13 20:33:32

3

將會產生你想要的東西的答案是@"(?=\[\[.*?\]\])|(?<=\]\])"

這有兩個部分,它由|「或」符號分開。

(?=\[\[.*?\]\])將尋找其後面緊跟着一個[[一些字符,以及]]和拆分其間它與[任何符號。

(?<=\]\])將查找緊接在]]之前的任何符號,並緊接在]後面分割。

這些被稱爲「lookahead」和「lookbehind」,你可以找到它們的更多變體here

+0

+1雖然我認爲在這種情況下使用的更相關的名稱是「零寬度斷言」。 – JDB 2013-02-13 20:16:27

+0

@ Cyborgx37 - 我從來沒有聽說過這個詞。很高興知道這裏有一個正式的名詞! – Bobson 2013-02-13 20:46:30