为什么我没有获得所有正则表达式捕获?

时间:2014-04-30 17:35:54

标签: c# .net regex

我正在使用.NET Regex从字符串中捕获信息。我有一个用条形字符括起来的数字模式,我想挑出数字。这是我的代码:

string testStr = "|12||13||14|";
var testMatch = Regex.Match(testStr, @"^(?:\|([0-9]+)\|)+$");

但是,testMatch.Captures只有1个条目,它等于整个字符串。为什么它没有3个条目,121314?我错过了什么?

1 个答案:

答案 0 :(得分:5)

您想使用Captures本身的Group属性 - 在本例中为testMatch.Groups[1]。这是必需的,因为正则表达式中可能有多个捕获组,并且它无法知道您指的是哪一个。

有效使用testMatch.Captures可获得testMatch.Groups[0].Captures

This works对我来说:

string testStr = "|12||13||14|";
var testMatch = Regex.Match(testStr, @"^(?:\|([0-9]+)\|)+$");

int captureCtr = 0;
foreach (Capture capture in testMatch.Groups[1].Captures) 
{
    Console.WriteLine("Capture {0}: {1}", captureCtr++, capture.Value);
}

参考:Group.Captures