Что касается .NET, вы можете использовать такие захваты:
> $s = "blah blah blah (foo:this, bar:that)"
> $result = [regex]::Match($s, '[^(]*\((?:\w+:(?<t>\w+),\s*)*\w+:(?<t>\w+)\)$')
> $result.Groups
Groups : {blah blah blah (foo:this, bar:that), that}
Success : True
Captures : {blah blah blah (foo:this, bar:that)}
Index : 0
Length : 35
Value : blah blah blah (foo:this, bar:that)
Success : True
Captures : {this, that}
Index : 30
Length : 4
Value : that
> $result.Groups[1].captures
Index Length Value
----- ------ -----
20 4 this
30 4 that
это код в PowerShell.Однако PowreShell основан на .NET, поэтому он должен работать в .NET.
Выражение синтаксического анализа основано на опубликованном вами примере, поэтому оно пропускает все до (
и затем начинает синтаксический анализ значений.Обратите внимание, что (?:..)
- это группа без захвата, поэтому она не отображается в результатах.