C# 正则表达式 - 为括号内的单个模式查找一个或多个匹配项
Posted
技术标签:
【中文标题】C# 正则表达式 - 为括号内的单个模式查找一个或多个匹配项【英文标题】:C# regex - find one or more matches for a single pattern inside parentheses 【发布时间】:2021-02-06 10:05:01 【问题描述】:我有以下字符串:
(someMethod("SomeString1"), someMethod("SomeString2. SomeString3"))
需要的输出是:
1. Group 'method': someMethod ; Group 'key': SomeString1
2. Group 'method': someMethod ; Group 'key': SomeString2. SomeString3
到目前为止,我有以下正则表达式:
\((?<method>someMethod)\(\"(?<key>.*)\"\)\)
但是它返回一个不正确的结果:
1. Group 'method': someMethod ; Group 'key': SomeString1"), someMethod("SomeString2. SomeString3
我应该如何修改正则表达式以获得所需的输出?
更新:最后,它应该匹配以下内容:
someMethod("SomeString1") - No, should not match
(someMethod("SomeString1"), someMethod("SomeString2. SomeString3")) - Yes, two matches
【问题讨论】:
可能是\b(?<method>someMethod)\("(?<key>.*?)"\)
?见regex101.com/r/nqDEkI/1
【参考方案1】:
要获得多个匹配项,您可以重复该部分 1 次或多次以至少获得 2 个匹配项并保持相同的组名。然后您可以从capture collection 获取匹配项。
\((?<method>someMethod)\("(?<key>.*?)"\)(?:,\s*(?<method>someMethod)\("(?<key>.*?)"\))+\)
.Net regex demo
【讨论】:
谢谢@第四只鸟,这正是我需要的!最后不得不修改一下,以防我遇到以下字符串:a) (someMethod("SomeString1"), someMethod("SomeString2"), someOtherMethod.someProperty) b) (someMethod("SomeString1")) c) (someMethod("SomeString1"), someOtherMethod.someProperty) 这是我最后的正则表达式: ((?以上是关于C# 正则表达式 - 为括号内的单个模式查找一个或多个匹配项的主要内容,如果未能解决你的问题,请参考以下文章