var pattern = (?:[P|p]rint\("")(.+)(?:""\);?)
var input = Print("Hello World");
结果分为两组,第二组完全捕获了我要捕获的内容,而第一组完全没用,如何删除第一组?
我尝试(?:ABC)无效
答案 0 :(得分:1)
您的模式使用1个捕获组()
和2个非捕获组使用(?:)
您可以忽略字符集中的这两个非捕获组以及|
。我认为您还希望使.*
这样的.*?
成为非贪婪者,以防止过度匹配。
然后您的模式可能看起来像(在末尾匹配一个可选的分号):
[Pp]rint\("(.+?)"\);?
您也可以使用带有negated character class的版本来匹配双引号:
[Pp]rint\(("[^"]+)"\);
答案 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;