正则表达式(.NET)捕获除空间之外的所有内容

时间:2018-11-14 02:17:41

标签: .net regex

我正在尝试将正则表达式与单个捕获组结合使用以达到以下目的:

[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属性的空格。

1 个答案:

答案 0 :(得分:0)

在用法说明中进行澄清后,您可以使用此模式来匹配您的字符串。请注意,您需要提供搜索字符串的长度(不带空格),以及搜索字符串本身(同样不带空格)。

([mc304](?:\s+?)?){5}

这通过使用非捕获组来分隔空格,并通过使用字符类来指定哪些字符是合法的而起作用。请注意,您不应在其中重复字母或数字,因此,如果您要查找“ mc300”,则可以使用[mc30],长度为5。不幸的是,这也将匹配mc030和mc003等。但是也许您可以通过手动确保在按下替换键之前进行此操作...