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] = "."
4

2 回答 2

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);
}
于 2013-02-13T19:51:18.410 回答
3

将产生你想要的答案是@"(?=\[\[.*?\]\])|(?<=\]\])"

这有两个部分,由|“或”符号分隔。

(?=\[\[.*?\]\])将查找紧跟在 a[[一些字符和 a之后的任何符号,并在]]它和 . 之间分割[

(?<=\]\])将查找紧接在 . 之前]]并在 . 之后拆分的任何符号]

这些被称为“前瞻”和“后瞻”,您可以在此处找到它们的更多变体。

于 2013-02-13T20:02:45.593 回答