为什么正则表达式
class (?<class>\w+) (?<b>\{)(?:\s*(?<method>\w+)\(\)\{\})*\s*(?<-b>\})
应用于
class A { B(){} C(){} }
只返回
class: A
method: C
?
在我看来,它也应该与B匹配。
有没有办法实现这个目标?
答案 0 :(得分:0)
如果您有重复的小组,则必须使用捕获。
Match m = Regex.Match("class A { B(){} C(){} }", @"class (?<class>\w+) (?<b>\{)(?:\s*(?<method>\w+)\(\)\{\})*\s*(?<-b>\})");
var methods = m.Groups["method"].Captures;
for (int i = 0; i < methods.Count; i++)
Console.WriteLine(methods[i].Value);
输出:
B
C
此外:您不能将-b
用作群组名称,将其更改为b_end
或类似名称,否则您将无法捕获b
和-b
群组。
class (?<class>\w+) (?<b_start>\{)(?:\s*(?<method>\w+)\(\)\{\})*\s*(?<b_end>\})