首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在C#Regex中获取捕获组的名称?

如何在C#Regex中获取捕获组的名称?
EN

Stack Overflow用户
提问于 2018-03-22 06:03:07
回答 2查看 0关注 0票数 0

有没有办法在C#中获取捕获组的名称?

代码语言:txt
复制
string line = "No.123456789  04/09/2009  999";
Regex regex = new Regex(@"(?<number>[\d]{9})  (?<date>[\d]{2}/[\d]{2}/[\d]{4})  (?<code>.*)");

GroupCollection groups = regex.Match(line).Groups;

foreach (Group group in groups)
{
    Console.WriteLine("Group: {0}, Value: {1}", ???, group.Value);
}

我想得到这个结果:

代码语言:txt
复制
Group: [I don´t know what should go here], Value: 123456789  04/09/2009  999
Group: number, Value: 123456789
Group: date,   Value: 04/09/2009
Group: code,   Value: 999
EN

回答 2

Stack Overflow用户

发布于 2018-03-22 14:56:18

使用GetGroupNames若要获取表达式中的组列表,然后使用名称作为组集合中的键对这些组进行迭代,请执行以下操作。

例如,

代码语言:txt
复制
GroupCollection groups = regex.Match(line).Groups;

foreach (string groupName in regex.GetGroupNames())
{
    Console.WriteLine(
       "Group: {0}, Value: {1}",
       groupName,
       groups[groupName].Value);
}
票数 0
EN

Stack Overflow用户

发布于 2018-03-22 15:40:01

使用以下扩展方法:

代码语言:txt
复制
public static class MyExtensionMethods
{
    public static Dictionary<string, string> MatchNamedCaptures(this Regex regex, string input)
    {
        var namedCaptureDictionary = new Dictionary<string, string>();
        GroupCollection groups = regex.Match(input).Groups;
        string [] groupNames = regex.GetGroupNames();
        foreach (string groupName in groupNames)
            if (groups[groupName].Captures.Count > 0)
                namedCaptureDictionary.Add(groupName,groups[groupName].Value);
        return namedCaptureDictionary;
    }
}

一旦这个扩展方法就位,你就可以获得如下的名称和值:

代码语言:txt
复制
    var regex = new Regex(@"(?<year>[\d]+)\|(?<month>[\d]+)\|(?<day>[\d]+)");
    var namedCaptures = regex.MatchNamedCaptures(wikiDate);

    string s = "";
    foreach (var item in namedCaptures)
    {
        s += item.Key + ": " + item.Value + "\r\n";
    }

    s += namedCaptures["year"];
    s += namedCaptures["month"];
    s += namedCaptures["day"];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100007733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档