如何访问正则表达式组的.Name?

时间:2019-06-24 05:26:16

标签: c# regex visual-studio-2017

我有一个这样的正则表达式:

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。 编译器只是说“没有名字”。

现在我的问题是:如何访问名称?

2 个答案:

答案 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);
    }
}

https://rextester.com/FKYG47557

中发布了示例