Bonjour à tous,
Je viens à vous car je manque de recul. Je suis sur un gros fichier d'expressions que je dois enrichir afin d'obtenir de nouveaux attributs dans des liens. Concrètement et simplement, je dois ajouter des groupe de capture.
J'ajoute que je suis relativement débutant en la matière.
Ma problématique est que dans mon application mes extractions fonctionnent de $1 à $9. la $10 ne prend pas car ce qui est interprété est $1 suivi de 0.
Bref, on m'a conseillé une optimisation, mais je me rends compte (après avoir réalisé une grosse optimisation) que cela ne fonctionne pas !
Concrètement, voici la chaîne de caractère que je veux valider par exemple :
Cass., Avis, 1er janvier 2012, n° 12-45.644
Expression de base :
Cass\.(,\s+(Avis|QPC))?,\s+(\d{1,2})e?r?(\s| )+(\w+\.?)\s+(\d{4}),\s+n(°|°|o)s?(\s| )+(\d{2}-\d{2}\.?\d{3})
(j'ai mis une espace entre le ; et le ) pour éviter le )
optimisée en
Cass\.(,\s+(Avis|QPC))?,\s+(\d{1,2})e?r?[\s| ]+(\w+\.?)\s+(\d{4}),\s+n[°|°|o]s?[\s| ]+(\d{2}-\d{2}\.?\d{3})
J'ai mis en couleur les 4 seuls groupes de capture dont j'ai besoin réellement.
Le problème est donc que dans la première expression régulière, j'ai trop de groupe de capture, or, en remplaçant (\s| ) par [\s| ] par exemple, le rendu n'est pas bon. ( étant une espace insécable).
par exemple, si j'écris 1er septembre, mon 4e groupe de capture ne va pas renvoyer "septembre" mais "eptembre" car avant il y a [\s| ]+ qui prend le s de septembre...
Je commence à être un peu perdu, savez-vous si il y une méthode pour écrire cette expression avec le moins de () possible mais tout en faisant le job ?
Merci d'avance si je ne suis pas clair n'hésitez pas à me le faire remarquer.
Romain
Partager