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:
txt = 'abab123'
res = re.search('(ab)+([1-9]+)', txt)
Ca rezultat, în grupurile noastre va fi următoarele:
print(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:
txt = 'abab123'
res = re.search('(?:ab)+([1-9]+)', txt)
Ca rezultat, în primul group va fi numărul nostru:
print(res[1]) # va afișa '123'