Parênteses não capturadores em expressões regulares do Python
Os parênteses ( ) desempenham duas funções -
agrupamento de caracteres e a função de grupo de captura (capturing group). E
o que fazer se você precisar agrupar, mas
não capturar? Para resolver esse problema,
foram criados os parênteses não capturadores (?: ) - eles agrupam,
mas não capturam em um grupo.
Exemplo
No exemplo a seguir, os primeiros parênteses são necessários para agrupamento, e os segundos - para um grupo de captura. No entanto, ambos os tipos de parênteses salvam dados em um grupo:
txt = 'abab123'
res = re.search('(ab)+([1-9]+)', txt)
Como resultado, nossos grupos de captura conterão o seguinte:
print(res[0]) # exibirá 'abab123'
print(res[1]) # exibirá 'ab'
print(res[2]) # exibirá '123'
Exemplo
Vamos fazer com que o primeiro par de parênteses apenas agrupe, mas não capture em um grupo:
txt = 'abab123'
res = re.search('(?:ab)+([1-9]+)', txt)
Como resultado, nosso número estará no primeiro grupo de captura:
print(res[1]) # exibirá '123'