Bonjour,
Premièrement, je n'étais pas très sûr de l'endroit où poster, mais comme je vais utiliser cette expression régulière en .Net je poste ici, avis à tout modérateur qui estimerait plus judicieux de déplacer le sujet en un lieu plus approprié
Deuxièmement, je tiens à préciser que je ne parle pas couramment le regexloin de là c'est à force de patience le tutorial de StormimOn sous une main et Expresso dans l'autre que j'ai finalement avancé petit à petit (7h30 au total !)
Bon je place le contexte, je cherche à convertir les nombres écrits en toutes lettres en valeur numérique (techniquement en chaine de caractère vu la taille de certains nombres). En effet je peux aller jusqu'à 999-llion (soit 1 000 000 ^ 999).
Pour définir le noms de ces nombres astronomiques je me suis servi de cette page Wikipédia et au final j'ai une expression régulière qui fonctionne mais qui ne doit pas être bien judicieusement construite.
Il reste des zones qui se répètent mais que je ne vois pas comment factoriser, bref pas mal de bricolage je pense, sans parler d'un cas que je n'ai pas encore géré à savoir celui des unités isolées (voir article Wikipédia).
Donc me voilà auprès de vous afin de rectifier ce qui a lieu d'être ou de me dire que finalement on peut pas faire mieux (mais j'en doute fortement).
Fin du suspense je révèle le monstre
D'avance merci pour déjà avoir tout lu
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 ^(?<Unite>un|duo|tre|quattuor|quinqua(?!g)|se(?!p)|septe|octo|nove)? (?:(?<Dizaine>(?:dec|vingint)i|(?:sexa|septua|octo|nona)ginta)| (?(?<=tre|se)(?:s))(?<Dizaine>(?:tri|quadra|quinqua)ginta)| (?(?<=se)(?:x))(?<Dizaine>octoginta)| (?(?<=septe|nove)(?:m))(?<Dizaine>octoginta)| (?(?<=septe|nove)(?:n))(?<Dizaine>deci|vinginti|(?:tri|quadra|quinqua|sexa|septua)ginta))? (?:(?<Centaine>(?:|du|tre|ses)centi|(?:quadri|qui|septi|octi|no)ngenti)| (?(?<=tre|se)(?:s))(?<Centaine>(?:trecenti|(?:quadri|qui)ngenti))| (?(?<=se)(?:x))(?<Centaine>(?:centi|octingenti))| (?(?<=septe|nove)(?:m))(?<Centaine>octingenti)| (?(?<=septe|nove)(?:n))(?<Centaine>(?:|du|tre|ses)centi|(?:quadri|qui)ngenti))?$ainsi que toute aide ou indication que vous pourriez m'apporter !
Partager