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

本文关键字:单词 选择 | 更新日期: 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 ,以获取所有内容。