我需要在C#中拆分一个字符串。我认为最好看下一个例子:
string formula="[[A]]*[[B]]"
string split = Regex.Match(formula, @"\[\[([^)]*)\]\]").Groups[1].Value;
我想获得一个字符串列表,其中包含'[[和']]'之间的单词,所以,在这种情况下,我应该得到'A'和'B',但我得到的是:A ]] * [[B
答案 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
来获取所有内容。