2009-02-26 6 views
0

J'ai une chaîne:Mise en valeurs appariée dans le même groupe, RegEx C#

nom_type "abc" < text1> text2>
> "AB123" < text3

Maintenant, je veux pour extraire tous les mots alphanumériques qui sont précédés d'un « < » ou « > »

J'ai donc écrit:

[<>]\s*(?'name'\w+) 

Je reçois les correspondances, (et par exemple ci-dessus je reçois 3 correspondances, chacune a un groupe appelé nom) et de nom, je suis en mesure d'accéder aux valeurs text1, text2 et text3 à savoir. Mais je veux qu'ils viennent dans le groupe même mais un autre capture, afin que je puisse écrire quelque chose comme

foreach(Capture C in Match.Groups["name"]) 

je besoin à cause de la façon dont je l'ai conçu mon analyseur pour traiter regexes, il attend différents valeurs dans le même groupe mais une capture différente. Pouvez-vous m'aider comme comment les rassembler.

+2

Troisième! Pourquoi ne pouvez-vous pas utiliser le fil d'origine? Http: //stackoverflow.com/questions/589323/extending-regular-expression-in-c, http://stackoverflow.com/questions/585853/regex-for-variable- déclaration-et-initialisation-en-c et maintenant cela. – dirkgently

Répondre

0

Vous ne les voulez pas vraiment dans le même match car vous devez prendre en compte les éléments que vous ne vouliez pas dans le reste de l'entrée et ce serait plus lent. Vous feriez mieux de faire quelque chose comme ceci:

Regex re = new Regex(@"[<>]\s*(?<name>\w+)"); 
MatchCollection matches = re.Matches("type_name \"abc\" <text1> text2 > \"ab123\" < text3");    
foreach (Match m in matches) 
{ 
    string name = m.Groups["name"].Value; 
} 
Questions connexes