আমি কীভাবে একটি সি # রেজেক্সে বন্দী গোষ্ঠীর নাম পেতে পারি?


97

সি # তে কোনও বন্দী গোষ্ঠীর নাম পাওয়ার কোনও উপায় আছে কি?

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

আমি এই ফলাফল পেতে চাই:

গোষ্ঠী: [এখানে কী যাওয়া উচিত তা আমি জানি না], মান: 123456789 04/09/2009 999
গ্রুপ: সংখ্যা, মান: 123456789
দল: তারিখ, মান: 04/09/2009
গোষ্ঠী: কোড, মান: 999

উত্তর:


127

ব্যবহারের GetGroupNames সেই ওভার একটি অভিব্যক্তি দলের তালিকাটি পেতে এবং তারপর বারবার, গ্রুপ সংগ্রহে মধ্যে কী হিসেবে নাম ব্যবহার করে।

উদাহরণ স্বরূপ,

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

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

9
ধন্যবাদ! ঠিক আমি যা চেয়েছিলাম আমি কখনই ভাবিনি যে এটি
রিজেক্স

22

এটি করার সর্বোত্তম উপায় হ'ল এই এক্সটেনশন পদ্ধতিটি ব্যবহার করে:

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;
    }
}


এই এক্সটেনশন পদ্ধতিটি একবার হয়ে গেলে আপনি নাম এবং মানগুলি এর মতো পেতে পারেন:

    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"];


7

আপনার ব্যবহার করা উচিত GetGroupNames();এবং কোডটি এর মতো দেখতে পাবেন:

    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;

    var grpNames = regex.GetGroupNames();

    foreach (var grpName in grpNames)
    {
        Console.WriteLine("Group: {0}, Value: {1}", grpName, groups[grpName].Value);
    }

0

রেজেক্স ক্লাস এটির মূল চাবিকাঠি!

foreach(Group group in match.Groups)
{
    Console.WriteLine("Group: {0}, Value: {1}", regex.GroupNameFromNumber(group.Index), group.Value);
}

http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.groupnamefromnumber.aspx


10
এটি ভুল, group.Indexমূল পাঠ্যটিতে ম্যাচ গ্রুপের সূচনার অবস্থান। রেজেক্সে গ্রুপটির "সূচক" নয়।
স্কুইগ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.