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

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

但是,testMatch.Captures仅具有1个条目,该条目等于整个字符串。为什么它没有3个条目121314?我想念什么?

最佳答案

您想在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

关于c# - 为什么我没有获得所有的正则表达式捕获内容?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23394575/

10-10 10:33