我正在尝试将正则表达式与单个捕获组结合使用以达到以下目的:
[RuleID("MC304")]
[RuleID("MC 304")]
[RuleID("MC 30 4")]
对此:
[RuleID("MC304")]
[RuleID("MC304")]
[RuleID("MC304")]
我已经使用此regex101 example完成了此结果,但是非常简单:
我匹配
\[RuleID\("(\w*)\s*(\w*)\s*(\w*)\s*"\)\]
并替换为
[RuleID("$1$2$3")]
我希望能够使用捕获组内嵌套的非捕获组,因此我可以将双引号内的内容替换为$1
,而不必串联$1$2$3
,但是我不认为这是可能的。
如果有人对如何编写正则表达式有任何指导,而不是每个空间都必须重复(\w*)\s*
,那么我希望我能为您提供帮助!
我希望此解决方案对于任何字母数字字符串(两者之间有空格)通用。上面的示例适用于“ MC304”,但也可以是带空格的任何数字字母组合。
注意:我正在使用Visual Studio的内置查找和替换功能来删除整个解决方案中所有RuleID
属性的空格。
答案 0 :(得分:0)
在用法说明中进行澄清后,您可以使用此模式来匹配您的字符串。请注意,您需要提供搜索字符串的长度(不带空格),以及搜索字符串本身(同样不带空格)。
([mc304](?:\s+?)?){5}
这通过使用非捕获组来分隔空格,并通过使用字符类来指定哪些字符是合法的而起作用。请注意,您不应在其中重复字母或数字,因此,如果您要查找“ mc300”,则可以使用[mc30],长度为5。不幸的是,这也将匹配mc030和mc003等。但是也许您可以通过手动确保在按下替换键之前进行此操作...