简化正则表达式分组

时间:2019-04-19 15:37:16

标签: c# regex

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

var input = Print("Hello World");

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

我尝试(?:ABC)无效

2 个答案:

答案 0 :(得分:1)

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

您可以忽略字符集中的这两个非捕获组以及|。我认为您还希望使.*这样的.*?成为非贪婪者,以防止过度匹配。

然后您的模式可能看起来像(在末尾匹配一个可选的分号):

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

Regex demo

您也可以使用带有negated character class的版本来匹配双引号:

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

Regex demo

答案 1 :(得分:0)

尝试以下操作:

            string input = "var input = Print(\"Hello World\");";
            string pattern = "[Pp]rint\\(\"(?'message'[^\"]+)";

            Match match = Regex.Match(input, pattern);
            string message = match.Groups["message"].Value;