选择括号内的所有单词(多个匹配项)
本文关键字:单词 选择 | 更新日期: 2023-09-27 18:31:51
我需要在 C# 中拆分一个字符串。我认为最好看下一个示例:
string formula="[[A]]*[[B]]"
string split = Regex.Match(formula, @"'['[([^)]*)']']").Groups[1].Value;
我想得到一个字符串列表,其中包含"[["和"]]"之间的单词,所以在这种情况下,我应该得到"A"和"B",但我得到这个:A]]*[[乙
你的主要问题是Regex.Match将匹配第一个出现,并停止。 从文档中:
在指定的输入字符串中搜索 Regex 构造函数中指定的正则表达式的第一个匹配项。
你希望Regex.Matchs得到它们。 此正则表达式将起作用:
'['[(.+?)']']
它将捕获[[
和]]
之间的任何内容
因此,您的代码可能如下所示:
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"
*
尽可能匹配它前面的表达式。使用*?
匹配尽可能小的匹配项。
请参阅 http://msdn.microsoft.com/en-us/library/az24scfc(v=vs.110).aspx#量词
所以你的正则表达式应该是@"'['[([^)]*?)']']"
另外,使用 Regex.Matches
而不是 Regex.Match
,以获取所有内容。