При этом используется специальная конструкция, называемая балансирующими группами, для достижения рекурсивности и захвата более одного уровня вложенности в методе, если это потребуется. Захваченные команды размещаются внутри группы «команды»
var regex = new Regex(@"method
[(]
(?<action>\w+)\s*,\s*
(\s*
(?<commands>\w+
(;|
((?<open>[(])[^(]*?)+
(?<close-open>[)])+
(?(open)(?!))
))+
\s*)+
[)]", RegexOptions.IgnoreWhitespace | RegexOptions.ExplicitCapture);
Здесь есть постоянная ссылка для регулярного выражения. Если вы посмотрите туда, то увидите следующую таблицу:
![enter image description here](https://i.stack.imgur.com/ifF83.png)
Как видно здесь, регулярное выражение совпало с 4 командами во втором Строка, в которой действие a
, для получения этих результатов вы можете сделать regex.Match(foo).Groups["commands"].Captures.Select(c => c.Value)