我正在使用以下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
有没有办法修改正则表达式本身,以便括号不包含在输出中?我尝试将表达式的。+部分放在命名组中,但它打破了匹配。显然,我可以通过另一个正则表达式运行每个结果来删除括号,但我想知道是否有更清洁/更好的方法来执行此操作。
答案 0 :(得分:2)
是的,你可以使用look-behind和look-ahead断言:
(?<=\[)(.+?)(?=])
代码是:
var result = Regex.Matches("foo[a][b][cccc]bar", @"(?<=\[).+?(?=])")
.Cast<Match>()
.Select(m => m.ToString())
.ToArray();
另请注意,您不需要在正则表达式中对括号()
进行分组,因为您没有尝试捕获任何组。