12
votes

Regex: Comment obtenir un nom de groupe

J'ai une regex .NET qui ressemble à: xxx

J'utilise la méthode matchs contre une chaîne d'échantillon par exemple. "aaabbbaaa" , puis itération sur les correspondances.

Mon objectif est de trouver les types de correspondance, à l'aide du groupe de correspondance de regex, donc pour cette regex que ce sera:

  • type1
  • type2
  • type1

    Je n'ai pu trouver aucun getgroupname méthode. S'il vous plaît aider.


0 commentaires

3 Réponses :


8
votes

Si vous souhaitez extraire un nom de groupe spécifique, vous pouvez utiliser le regex . groupnamefromnumate méthode. xxx

aussi, il y a un index de chaîne sur le groupcollection . Objet qui est accessible sur le correspondant . Groupes propriété, cela vous permet d'accéder à un groupe dans une correspondance par nom au lieu de par index. xxx


0 commentaires

19
votes

Est-ce le genre de chose que vous recherchez? Il utilise Regex.GroupNameFromNumber code > afin que vous n'ayez pas besoin de connaître les noms de groupe en dehors de la regex elle-même.

using System;
using System.Text.RegularExpressions;

class Test
{
    static void Main()
    {
        Regex regex = new Regex("(?<Type1>AAA)|(?<Type2>BBB)");
        foreach (Match match in regex.Matches("AAABBBAAA"))
        {
            Console.WriteLine("Next match:");
            GroupCollection collection = match.Groups;
            // Note that group 0 is always the whole match
            for (int i = 1; i < collection.Count; i++)
            {
                Group group = collection[i];
                string name = regex.GroupNameFromNumber(i);
                Console.WriteLine("{0}: {1} {2}", name, 
                                  group.Success, group.Value);
            }
        }
    }
}


0 commentaires

0
votes

Essayez ceci:

        var regex = new Regex("(?<Type1>AAA)|(?<Type2>BBB)");
        var input = "AAABBBAAA";
        foreach (Match match in regex.Matches(input))
        {
            Console.Write(match.Value);
            Console.Write(": ");
            for (int i = 1; i < match.Groups.Count; i++)
            {
                var group = match.Groups[i];
                if (group.Success)
                    Console.WriteLine(regex.GroupNameFromNumber(i));
            }    
        }


0 commentaires