odenizot
-
Modifié le 4 août 2021 à 19:32
Whismeril
Messages postés18797Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 3 décembre 2023
-
5 août 2021 à 13:44
Bonjour,
J'ai la règle suivante
"(texte\w*)(?!@@.*)",
pour conserver tout ce qui commence par "texte" en ignorant les "@@" et ce qui suit.
J'applique les textes suivante :
"texte_a_garder1"
et
"texte_a_garder2@@a_ignorer"
mais la seconde capture est incomplète, il manque le 2, je n'ai que "texte_a_garder1" et "texte_a_garder".
Par contre, si j'utilise la règle
"(texte\w*)(?!@@@.*)"
avec trois "@", cela fonctionne correctement, et celle-ci aussi
"(texte\w*)(?!@@.*)?"
J'ai fais l'essai en Python et sur le site "regex101.com" avec le même résultat.
Avez-vous une idée sur le sujet, je ne trouve rien de mon côté.
Whismeril
Messages postés18797Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 3 décembre 2023645 4 août 2021 à 23:06
Ton pattern dit qu’il ne faut pas qu’il y a 2 @ après la capture, donc la capture s’arrête avant de trouver 2 @ soit, quand elle trouve un chiffre et 1 @.
Une solution qui marche avec tes 2 exemples est
Ton cas donne le même résultat que moi, le "group 1" est incomplet, l'ajout du "?" en fin de règle fonctionne : (texte\w*)[^(@@)]?
Les règles suivantes aussi :
(texte\w*)(?!@@.*)? et (texte\w*)(?!@.*)?
La seconde si on ignore tout après le premier "@".
Dans tous les cas, il faut apparemment quantifier le "Negative lookahead group" pour que cela fonctionne.
https://regex101.com/r/2sIiWm/1
https://regex101.com/r/yObRBx/1
Vous n’avez pas trouvé la réponse que vous recherchez ?