首页 > 解决方案 > 简化正则表达式分组

问题描述

var pattern = (?:[P|p]rint\("")(.+)(?:""\);?)

var input = Print("Hello World");

结果分为两组,第二组恰好捕获了我想要捕获的内容,而第一个完全没用,如何删除第一个?

我试过 (?:ABC) 没用

标签: c#regex

解决方案


您的模式使用 1 个捕获组()和 2 个非捕获组(?:)

您可以省略这 2 个非捕获组以及|角色类中的 2 个。我想你也想让.*非贪婪者喜欢.*?防止过度匹配。

然后您的模式可能看起来像(匹配最后的可选分号):

[Pp]rint\("(.+?)"\);?

正则表达式演示

您还可以使用带有否定字符类的版本来匹配不匹配双引号:

[Pp]rint\(("[^"]+)"\);

正则表达式演示


推荐阅读