我有一个这样的正则表达式:
var a = new Regex("(?<PageNumber>.{2})(?<ListType>.{2})", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Multiline);
匹配:
a.Match("02KLThisIsATest");
当我成功匹配之后使用:
foreach (Group gr in match.Groups)
{
...
}
我可以在调试器中清楚地看到“名称”已填写,因此已填写“ 0”,“ Page'Number”,“ ListType”。但是我不能在源代码中使用:gr.Name。 编译器只是说“没有名字”。
现在我的问题是:如何访问名称?
答案 0 :(得分:0)
尝试
var a = new Regex("(?<PageNumber>.{2})(?<ListType>.{2})", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Multiline);
GroupCollection groups = a.Match("02KLThisIsATest").Groups;
var names = a.GetGroupNames();
foreach (var grpName in names )
{
Console.WriteLine("Group: {0}, Value: {1}", grpName, groups[grpName].Value);
}
答案 1 :(得分:0)
当我在.Net运行时4.7.2上运行时,它可以按预期工作
public static void Main(string[] args)
{
var a = new Regex("(?<PageNumber>.{2})(?<ListType>.{2})", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Multiline);
var match = a.Match("02KLThisIsATest");
foreach (Group gr in match.Groups)
{
//Your code goes here
Console.WriteLine(gr.Name + " | " + gr.Value);
}
}
中发布了示例