C# 用LINQ对正则表达式进行分组

C# 用LINQ对正则表达式进行分组,c#,regex,linq,C#,Regex,Linq,我使用以下LINQ命令使用正则表达式从字符串中提取以括号分隔的参数列表: var result = Regex.Matches("foo[a][b][cccc]bar", @"(\[.+?])") .Cast<Match>() .Select(match => match.ToString()) .ToArray(); 有没有办法修改正则表达式本身,使括号不包含在输出中?我尝试将表达式的.+部分放在命名组中,但它破坏了匹配。显然,我可以通过另一个正则表

我使用以下LINQ命令使用正则表达式从字符串中提取以括号分隔的参数列表:

var result = Regex.Matches("foo[a][b][cccc]bar", @"(\[.+?])")
    .Cast<Match>()
    .Select(match => match.ToString())
    .ToArray();

有没有办法修改正则表达式本身,使括号不包含在输出中?我尝试将表达式的.+部分放在命名组中,但它破坏了匹配。显然,我可以通过另一个正则表达式运行每个结果来删除括号,但我想知道是否有更干净/更好的方法来执行此操作。

是的,您可以使用“向后看”和“向前看”断言:

(?<=\[)(.+?)(?=])
(?m.ToString())
.ToArray();

还请注意,您不需要在正则表达式中使用分组括号
()
,因为您不想捕获任何组。

太好了,谢谢,到时候我会把它标记为答案!是时候让我多读点书了:)
(?<=\[)(.+?)(?=])
var result = Regex.Matches("foo[a][b][cccc]bar", @"(?<=\[).+?(?=])")
    .Cast<Match>()
    .Select(m => m.ToString())
    .ToArray();