Parenthèses non capturantes dans les regex Python
Les parenthèses ( ) remplissent deux fonctions -
le regroupement de caractères et la fonction de groupe de capture. Mais
que faire si vous avez besoin de regrouper, sans
créez un groupe de capture ? Pour résoudre ce
problème, des parenthèses non capturantes spéciales (?: ) ont été inventées - elles regroupent,
mais ne créent pas de groupe de capture.
Exemple
Dans l'exemple suivant, les premières parenthèses nous sont nécessaires pour le regroupement, et les secondes - pour le groupe de capture. Cependant, les deux types de parenthèses sauvegardent les données dans un groupe de capture :
txt = 'abab123'
res = re.search('(ab)+([1-9]+)', txt)
En conséquence, nos groupes de capture contiendront les éléments suivants :
print(res[0]) # affichera 'abab123'
print(res[1]) # affichera 'ab'
print(res[2]) # affichera '123'
Exemple
Faisons en sorte que la première paire de parenthèses seulement regroupe, sans créer de groupe de capture :
txt = 'abab123'
res = re.search('(?:ab)+([1-9]+)', txt)
En conséquence, notre nombre sera dans le premier groupe de capture :
print(res[1]) # affichera '123'