Regex(.NET)捕获除空间之外的所有内容

  • 本文关键字:空间 NET Regex .net regex
  • 更新时间 :
  • 英文 :


我正试图使用一个带有单个捕获组的正则表达式来转换以下内容:

[RuleID("MC304")]
[RuleID("MC 304")]
[RuleID("MC 30 4")]

进入这个:

[RuleID("MC304")]
[RuleID("MC304")]
[RuleID("MC304")]

我已经使用这个regex101示例实现了这个结果,但它非常初级:

我匹配

[RuleID("(w*)s*(w*)s*(w*)s*")]

并替换为

[RuleID("$1$2$3")]

我希望能够使用嵌套在捕获组中的非捕获组,这样我就可以用$1替换双引号中的内容,而不必连接$1$2$3,但我认为这是不可能的。

如果有人对如何编写一个比在每个空间复制(w*)s*更可重用的正则表达式有任何指导,我将非常感谢您的帮助!

编辑

我希望这个解决方案对任何中间有空格的字母数字字符串都是通用的。上面的例子是针对";MC304〃;但它也可以是任何带空格的数字字母组合。

注意:我正在使用Visual Studio内置的查找和替换功能来删除整个解决方案中所有RuleID属性中的空格。

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

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

这是通过使用非捕获组来隔离空间,并使用字符类来指定哪些字符是合法的来实现的。请注意,您不应该在其中重复字母或数字,所以如果您要查找"mc300",您应该使用[mc30]和长度5。不幸的是,这也将匹配mc030和mc003等…但也许你可以在按下替换之前手动确认。。。

最新更新