选择括号内的所有单词(多个匹配)

时间:2014-11-25 18:02:10

标签: c# regex split

我需要在C#中拆分一个字符串。我认为最好看下一个例子:

string formula="[[A]]*[[B]]"
string split = Regex.Match(formula, @"\[\[([^)]*)\]\]").Groups[1].Value;

我想获得一个字符串列表,其中包含'[[和']]'之间的单词,所以,在这种情况下,我应该得到'A'和'B',但我得到的是:A ]] * [[B

2 个答案:

答案 0 :(得分:2)

您的主要问题是Regex.Match会与第一个匹配项匹配,并停止。来自文档:

  

在指定的输入字符串中搜索Regex构造函数中指定的第一次出现的正则表达式。

您希望Regex.Matches全部获取。这个正则表达式将起作用:

\[\[(.+?)\]\]

它会捕获[[]]

之间的任何内容

因此您的代码可能如下所示:

string formula = "[[A]]*[[B]]";
var matches = Regex.Matches(formula, @"\[\[(.+?)\]\]");

var results = (from Match m in matches select m.Groups[1].ToString()).ToList();

// results contains "A" and "B"

答案 1 :(得分:1)

*尽可能匹配之前的表达式。使用*?匹配最小的匹配。

请参阅http://msdn.microsoft.com/en-us/library/az24scfc(v=vs.110).aspx#quantifiers

所以你的正则表达式应该是@"\[\[([^)]*?)\]\]"

另外,使用Regex.Matches而不是Regex.Match来获取所有内容。