Paranteze non-captante în expresiile regulate Python

Parantezele ( ) îndeplinesc două funcții - gruparea caracterelor și funcția de captare (group). Și ce să faci dacă trebuie să grupezi, dar să nu capți? Pentru a rezolva această problemă au fost create parantezele non-captante (?: ) - ele grupează, dar nu capturează în group.

Exemplu

În exemplul următor, primele paranteze ne sunt necesare pentru grupare, iar cele două - pentru captare. Cu toate acestea, ambele tipuri de paranteze salvează date în group:

pythontxt = 'abab123'
res = re.search('(ab)+([1-9]+)', txt)

Ca rezultat, în grupurile noastre va fi următoarele:

pythonprint(res[0]) # va afișa 'abab123'
print(res[1]) # va afișa 'ab'
print(res[2]) # va afișa '123'

Exemplu

Să facem astfel încât prima pereche de paranteze doar să grupeze, dar să nu captureze în group:

pythontxt = 'abab123'
res = re.search('(?:ab)+([1-9]+)', txt)

Ca rezultat, în primul group va fi numărul nostru:

pythonprint(res[1]) # va afișa '123'