J'ai une regex .NET qui ressemble à: J'utilise la méthode matchs em> contre une chaîne d'échantillon par exemple. Mon objectif est de trouver les types de correspondance, à l'aide du groupe de correspondance de regex, donc pour cette regex que ce sera: p> Je n'ai pu trouver aucun "aaabbbaaa" code>, puis itération sur les correspondances. p>
getgroupname code> méthode. S'il vous plaît aider. P> p>
3 Réponses :
Si vous souhaitez extraire un nom de groupe spécifique, vous pouvez utiliser le aussi, il y a un index de chaîne sur le regex code> . code> groupnamefromnumate code> méthode. groupcollection code> . Objet qui est accessible sur le correspondant code > . code> Groupes code> propriété, cela vous permet d'accéder à un groupe dans une correspondance par nom au lieu de par index. p>
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);
}
}
}
}
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));
}
}