2013-02-13 204 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

相关问题