Negative Lookahead et capture incomplète

Résolu
odenizot - Modifié le 4 août 2021 à 19:32
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 - 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é.

6 réponses

Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
4 août 2021 à 17:02
Bonjour

Tu as essayé sur regex101 c’est super, ce qui serait encore mieux, c’est de mettre le lien vers ton test.

0
Bonjour,
Voici le lien :
https://regex101.com/r/cqQ7Ey/1
0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
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
 (texte\w*)[^(@@)] 
https://regex101.com/r/cqQ7Ey/2
0
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
5 août 2021 à 11:08
Dans ta question tu as parlé de capture pas de groupe, ma regex donne une capture complète, je ne me suis pas intéressé au groupe.

Mais les 2 patterns que tu as trouvé te conviennent tant mieux.

Pense à marquer le sujet résolu
0
Les solutions fonctionnent toutes, mais l'utilisation du "?" en fin de règle reste étrange pour moi.
0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
5 août 2021 à 13:44
Il veut dire que le « morceau » de pattern juste avant est présent ou pas. Si tu ne le mets pas ça ne marche pas pour ton exemple sans @
0
Rejoignez-nous