
Envoyé par
Sehnsucht
Construire une expression rationnelle dépend en partie de ce qu'on compte faire avec les résultats, s'il suffit juste de valider un motif
pas besoin de capture de groupe ou autre du coup ceci aurait pu suffire "^(\d+(?:\.[a-i1-9])?)(?:_(?1))*$" sauf que a priori les pattern récursif en .Net ça veut pas.
Après tu captures des groupes donc j'imagine que c'est pour les exploiter, du coup on s'en fiche de matcher le tout.
Comme tu dis que l'underscore sert de séparateur c'est donc que tu veux utiliser les "trucs" entre ces séparateurs donc autant ne matcher que ça (en utilisant Regex.Matches).
Ça simplifie le job on peut utiliser ainsi "(?<EpNum>\d+)(?:\.(?<part>[a-i1-9]))?" comme pattern.
Là on voit que j'ai nommé "part" la lettre ou chiffre potentiellement en plus.
Si tu veux les distinguer comme tu l'as fait on peut le faire ainsi "(?<EpNum>\d+)(?:\.(?:(?<alpha>[a-i])|(?<num>[1-9])))?" faudra ensuite tester dans le code si tel ou tel groupe a une valeur ou pas.
Pour le détail ; faudrait demander ce qui n'est pas compris, je mets de côté la toute première vu qu'elle est pas possible en .Net (a priori).
Pour le reste je pense pas qu'il y ait trop de complications au vu de celle que tu avais tentée.
Partager