正则表达式无法解析最后一组[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

这是考验。我希望最后一组是".png",但这种模式会返回""

var inputStr = @"C:\path\to\dir\[yyyy-MM-dd_HH-mm].png";
var pattern = @"(.*?)\[(.*?)\](.*?)";
var regex = new Regex(pattern);
var match = regex.Match(inputStr);

var thirdGroupValue = match.Groups[3].Value;
// ✓ EXPECTED: ".png"
// ✗ CURRENT: ""

第1和第2组工作正常。

c# regex
1个回答
2
投票

这是因为你让第3组懒惰的*

(.*?)\[(.*?)\](.*?)
                 ^
                here

这意味着它将尽可能少地匹配。什么是.*可以匹配的最少?空字符串!

你可以了解更多关于lazy vs greedy here的信息。

您可以通过删除?,使其变得贪婪或在最后放置$来解决这个问题,并告诉它匹配到字符串的结尾:

(.*?)\[(.*?)\](.*)

要么

(.*?)\[(.*?)\](.*?)$
© www.soinside.com 2019 - 2024. All rights reserved.