Paréntesis que no capturan en expresiones regulares de Python
Los paréntesis ( ) realizan dos funciones:
agrupar caracteres y la función de grupo de captura.
¿Y qué hacer si necesitas agrupar, pero
no quieres guardar en un grupo de captura? Para resolver este
problema se crearon los paréntesis que no capturan
(?: ) - agrupan,
pero no guardan en un grupo de captura.
Ejemplo
En el siguiente ejemplo, los primeros paréntesis los necesitamos para agrupar, y los segundos - para el grupo de captura. Sin embargo, ambos tipos de paréntesis guardan datos en un grupo de captura:
txt = 'abab123'
res = re.search('(ab)+([1-9]+)', txt)
Como resultado, en nuestros grupos de captura habrá lo siguiente:
print(res[0]) # mostrará 'abab123'
print(res[1]) # mostrará 'ab'
print(res[2]) # mostrará '123'
Ejemplo
Hagamos que el primer par de paréntesis solo agrupe, pero no guarde en un grupo de captura:
txt = 'abab123'
res = re.search('(?:ab)+([1-9]+)', txt)
Como resultado, en el primer grupo de captura estará nuestro número:
print(res[1]) # mostrará '123'