使用通配符时,正则表达式匹配不返回组

时间:2014-03-30 21:00:32

标签: c# .net regex

为什么这样做(返回25):

var match = Regex.Match("Age: 25 yrs.", @"(\d+)");
Console.WriteLine(match.Groups[1].Value);

但这并不是(返回一个空白组):

var match = Regex.Match("Age: 25 yrs.", @"(\d*)");
Console.WriteLine(match.Groups[1].Value);

关于.NET如何处理我错过的正则表达式,必须有一些基础。

2 个答案:

答案 0 :(得分:2)

\d*也匹配空字符串。 Match只找到第一个匹配项。而且正如我们所知,您可以在任何字符串前面填充任意数量的空字符串。所以它返回第一个空的。

因此,如果您这样做,它会匹配总共13个字符串,25就是其中之一。

var matches = Regex.Matches("Age: 25 yrs.", @"(\d*)");
foreach (var match in matches.Cast<Match>())
{
    Console.WriteLine(match.Index + ":" + match.Value);
}

答案 1 :(得分:0)

(\d*)将尝试取0-infinite,因此结果将是无限的,这是无效的。

您打算使用(\d)+,这将占用1位或更多位数。