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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式无法解析最后一组[重复]相关的知识,希望对你有一定的参考价值。

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

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

var inputStr = @"C:path	odir[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组工作正常。

答案

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

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

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

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

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

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

要么

(.*?)[(.*?)](.*?)$

以上是关于正则表达式无法解析最后一组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

循环通过 python 正则表达式匹配

正则表达式捕获第一个和最后一个括号内的所有内容[重复]

无法解析片段中的 findViewById [重复]

用于解析重复组的正则表达式

从正则表达式匹配中删除最后一个字符[重复]

使用正则表达式 Oracle