Expression régulière
blux
Messages postés
27997
Date d'inscription
Statut
Modérateur
Dernière intervention
-
khalilamk Messages postés 2 Statut Membre -
khalilamk Messages postés 2 Statut Membre -
Bonjour,
j'ai une expression régulière dont je voudrais récupérer quelques éléments.
J'utilise pour cela les variables $.
Mais je n'arrive pas à trouver un schéma cohérent pour le cas où un de mes pattern possède un OR.
Je m'explique, soit une suites de chaines :
TOTO 02.01.13 MAISON-1
TITI NODATE BOULOT-2
...
Je veux récupérer soit la date (pour la mettre en format frenchy, alors qu'elle est en british) soit l'absence de DATE, ainsi que le champ qui suit.
J'ai donc une ER qui ressemble à ça :
/(\w{6})( )((\d{2})(\.)(\d{2})(\.)(\d{2})|(NODATE))( )(\w+)(-)(.+)/
Le problème est qu'en fonction ce qui matche, mes variables $ ne sont pas les mêmes.
Y-a-t-il une astuce pour que ce soit toujours les mêmes ?
Pour l'instant j'ai fait un double test, mais c'est pas le truc le plus joli...
Merci d'avance à ceux qui se sentent inspirés.
j'ai une expression régulière dont je voudrais récupérer quelques éléments.
J'utilise pour cela les variables $.
Mais je n'arrive pas à trouver un schéma cohérent pour le cas où un de mes pattern possède un OR.
Je m'explique, soit une suites de chaines :
TOTO 02.01.13 MAISON-1
TITI NODATE BOULOT-2
...
Je veux récupérer soit la date (pour la mettre en format frenchy, alors qu'elle est en british) soit l'absence de DATE, ainsi que le champ qui suit.
J'ai donc une ER qui ressemble à ça :
/(\w{6})( )((\d{2})(\.)(\d{2})(\.)(\d{2})|(NODATE))( )(\w+)(-)(.+)/
Le problème est qu'en fonction ce qui matche, mes variables $ ne sont pas les mêmes.
Y-a-t-il une astuce pour que ce soit toujours les mêmes ?
Pour l'instant j'ai fait un double test, mais c'est pas le truc le plus joli...
Merci d'avance à ceux qui se sentent inspirés.
A voir également:
- Expression régulière
- Expression écrite cm1 cm2 télécharger gratuit - Télécharger - Éducatifs
- Microsoft expression encoder - Télécharger - Divers Utilitaires
- Expression de recherche - Guide
- Avoir du ping expression ✓ - Forum jeux en ligne
- T'as du ping expression - Forum Réseau
2 réponses
Bonjour,
Je ne suis pas vraiment expert en expression régulière, je les utilise un peu en Java mais on peut faire des trucs en plus donc je ne sais pas trop ce qui est correct dans le langage que tu utilises... en particulier je ne comprends pas trop ta phrase "mes variables $ ne sont pas les mêmes"
Bref, moi je ferais quelque chose comme ça :
Remarque : je mettrais aussi {1,2} à la place de {2}, au cas où le 0 ait été omis.
Je ne suis pas vraiment expert en expression régulière, je les utilise un peu en Java mais on peut faire des trucs en plus donc je ne sais pas trop ce qui est correct dans le langage que tu utilises... en particulier je ne comprends pas trop ta phrase "mes variables $ ne sont pas les mêmes"
Bref, moi je ferais quelque chose comme ça :
\w+\s(\d{2}\.\d{2}\.\d{2}|NODATE)\s(.+)
Remarque : je mettrais aussi {1,2} à la place de {2}, au cas où le 0 ait été omis.
Salut blux :-)
Si tu fais cela :
Note : j'ai rectifié (\w{4}) pour que cela marche sur l'exemple et j'ai simplifié la fin, car je ne comprenais pas ce que tu en faisais, et j'ai retiré les captures des points, car ils ne me paraissent pas utiles.
Dal
Si tu fais cela :
/(\w{4})\s((\d{2}|NO)\.*(\d{2}|DA)\.*(\d{2}|TE))\s(.*)/ dans le cas tu as :
Cas1 Cas2 --------------------------- $1 TITI TOTO $2 NODATE 02.01.13 $3 NO 02 $4 DA 01 $5 TE 13 $6 BOULOT-2 MAISON-1
Note : j'ai rectifié (\w{4}) pour que cela marche sur l'exemple et j'ai simplifié la fin, car je ne comprenais pas ce que tu en faisais, et j'ai retiré les captures des points, car ils ne me paraissent pas utiles.
Dal
pour contrôler si la première lettre d'une ligne (contenant en principe une phrase) saisie par l'utilisateur commence par les lettres A à Z majuscules, il suffit de tester ceci :
Si tu veux vérifier autre chose, il faudrait expliquer plus précisément comment se présente ta source de données, ce que l'utilisateur saisit et ce que tu appelles une "phrase" et potentiellement tenir compte d'un contexte pouvant rendre la regexp très compliquée.
Par souci de clarté, je te suggère d'ouvrir un nouveau fil, ta question étant différente de celle traitée ici.
Dal
^[A-Z]
Si tu veux vérifier autre chose, il faudrait expliquer plus précisément comment se présente ta source de données, ce que l'utilisateur saisit et ce que tu appelles une "phrase" et potentiellement tenir compte d'un contexte pouvant rendre la regexp très compliquée.
Par souci de clarté, je te suggère d'ouvrir un nouveau fil, ta question étant différente de celle traitée ici.
Dal
Voci le probléme au juste le prénom est en minuscule sans accents avec la première lettre en majuscule
Pour un prénom composé, tous les prénoms sont conservés, avec chaque première lettre en majuscule
j'ai travaillé comme ca (^[A-Z]([a-z, ,-])*) mais ca concerne au juste un seul mot pas une régle générique pour tous les mots...
Merci de me répondre si tu as une idée et merci bien pour votre collaboration
Pour un prénom composé, tous les prénoms sont conservés, avec chaque première lettre en majuscule
j'ai travaillé comme ca (^[A-Z]([a-z, ,-])*) mais ca concerne au juste un seul mot pas une régle générique pour tous les mots...
Merci de me répondre si tu as une idée et merci bien pour votre collaboration
Quand on travaille avec des ER, il y a toute une série de variables implicites qui représentent ce qui a 'matché' dans l'ER.
Elles s'appellent $1, $2, $3... $n.
Ici, dans ma première chaine, le mois peut être récupéré dans $3 et la fin de la chaine dans $9 et suivantes.
Si par contre, la date ne correspond pas (cas de la deuxième chaine), alors la fin de la chaine n'est pas en $9 et suivantes, car c'est 'nodate' qu'on a trouvé en $3 et la fin de la chaine est en $5 et suivants.
Du coup, je ne peux de manière définitive récupérer la fin de la chaine dans les mêmes variables, je suis obligé de travailler avec soit $9 et suivantes, soit $5 et suivantes, ce qui m'oblige à des lignes de code en plus.
Remarque : je mettrais aussi {1,2} à la place de {2}, au cas où le 0 ait été omis.
C'est moi qui l'ai généré, je me porte garant de la présence du 0 ;-)
Si tu te limites à une parenthèse par capture comme je l'ai fait, tu devrais avoir $1 sur ta (no)date, et $2 sur le reste, ce qui devrait donner ce que tu veux (ou plus exactement : ce que j'ai cru comprendre que tu voulais...)
Et puis aussi, je veux pouvoir manipuler la date pour la remettre en french, la fin de ma chaine car je fais des traitements en fonction de ce que j'y trouve...