Comment puis-je utiliser Lookbehind dans une regex C # regex afin de sauver des correspondances de motifs de préfixe répétés?
Exemple - J'essaie d'avoir l'expression correspondant à tous les caractères renvoie J'ai essayé p> et p> sans résultats ... p> Ce que je m'attends est B code> suivant un numéro de A code> caractères: p> aabbbb code>, correspondant uniquement à un A code>. Comment puis-je le faire pour qu'il corresponde à tous les A code> S au début? P> BBBB code>. P> < / p>
3 Réponses :
La raison pour laquelle le look-derrière saute le "A" est parce qu'il consomme le premier "A" (mais pas la capturer), alors il capture le reste.
Ce modèle fonctionne-t-il à la place? Nouveau motif: \ ba + (. +) \ B code>
Il utilise une limite de mot \ b code> pour ancrer les extrémités du mot. Il correspond au moins un "A" suivi du reste des caractères jusqu'à la fin de la limite de mot. Les caractères restants sont capturés dans un groupe afin que vous puissiez les référencez facilement. P> string pattern = @"\b(.)(\1)*(?<Content>.+)\b";
foreach (Match m in Regex.Matches("aaabbbb", pattern))
{
Console.WriteLine("Match: " + m.Value);
Console.WriteLine("Group capture: " + m.Groups["Content"].Value);
}
Faites-le sans avoir 'B' ou 'A' dans votre regex.
@John merci, j'ai été fixé sur la lettre "A" spécifiquement. Mon 2ème échantillon fonctionne avec n'importe quel caractère dupliqué et sans encombre.
D'accord, +1, je dirais que le mien est un peu plus concis, mais cela semble être plus facile à lire.
Vous recherchez un groupe de capture répété?
bbbb
J'ai besoin du groupe Lookebehind pour correspondre à tous les caractères. C'est-à-dire que la correspondance réelle est BBBB, car le groupe de répète a répété devrait être ignoré.
@Luvieere: J'ai fait ce changement.
Je l'ai finalement compris:
Regex expression = new Regex("(?<=a+)[^a]+");
foreach (Match result in expression.Matches(@"aaabbbb"))
MessageBox.Show(result.Value);
Quel est votre résultat attendu?