Bonjour,
Je pense que ta formulation est mauvaise d'entrée de jeu, car:
chaine qui commence par > suivi de n'importe quel caractère jusqu'à trouver <, ce dernier est suivi de n'importe quel caractère sauf < et > jusqu'à trouver <.
correspond stricto sensu à:
string pattern = @">.<[^<>]<";
ou à la limite:
string pattern = @">[^<]+<[^<>]+<";
ce qui échoue avec la chaîne que tu proposes.
Maintenant l'exemple que tu donnes au début est un peu plus parlant: J'en déduis que tu cherches à matcher >bbbbbb2<ccccc3>< (dis moi si je me trompe) ce qui se fait avec:
string pattern=@">(?:[^<]+<){2}";
Ce qui correspondrai à cette formulation:
"Chaîne commençant par >,
suivi de un ou plusieurs caractères différents de <, suivi de <,
suivi de un ou plusieurs caractères différents de <, suivi de <."
Voilà, j'ai supposé qu'il devait y avoir au moins un caractère entre chaque signe < ou >, mais si ce n'est pas le cas, il suffit de remplacer + par *.
Je te conseille de suivre un tutoriel quelconque sur les regex car visiblement tu n'es pas très à l'aise avec leur syntaxe, notamment pour ce qui est des classes de caractères.
. => n'importe quel caractère
[^<] => n'importe quel caractère sauf le <
.[^<] => n'importe quel caractère, suivi de n'importe quel caractère sauf le <
.^(<|>) => ne veut rien dire car le caractère ^ en dehors d'une classe de caractères s'il n'est pas échappé signifie "début de la chaîne" or il se trouve en plein milieu de la pattern.
Les expressions dites régulières sont bien moins compliquées qu'elles ne paraissent si on prend le temps de bien formuler ce que l'on cherche, et si on traduit cette formulation avec rigueur (sans essayer des trucs au hasard, sans "à peu près").
Bon courage.
Partager