2014-01-07 61 views
1

我使用以下LINQ命令使用不愿正则表达式提取的字符串中的托架分隔参数的列表不愿正则表达式:分组与LINQ

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

这将返回以下字符串数组如预期:

- result {string[3]} string[] 
    [0] "[a]" string 
    [1] "[b]" string 
    [2] "[cccc]" string 

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

回答

2

是的,你可以使用向后看和前瞻断言:

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

的代码则是:

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

也请注意,你不需要在分组括号()你的正则表达式,因为你不想捕获任何组。

+1

完美,谢谢,我会把它标记为时间到了!时间让我去做更多的阅读:) –