Nezachytávajúce zátvorky v regulárnych výrazoch Python

Zátvorky ( ) plnia dve funkcie - zoskupovanie znakov a funkciu zachytenia (capture group). A čo robiť, ak je potrebné zoskupiť, ale nechceme zachytiť? Na vyriešenie tohto problému boli vytvorené špeciálne nezachytávajúce zátvorky (?: ) - tie zoskupujú, ale nezachytávajú.

Príklad

V nasledujúcom príklade potrebujeme prvé zátvorky pre zoskupenie a druhé - pre zachytenie. Avšak, oboje zátvorky zachytávajú dáta:

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

V dôsledku budeme mať v našich zachytených skupinách nasledovné:

pythonprint(res[0]) # vypíše 'abab123'
print(res[1]) # vypíše 'ab'
print(res[2]) # vypíše '123'

Príklad

Upravme to tak, aby prvá para zátvoriek iba zoskupovala, ale nezachytávala:

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

V dôsledku bude v prvej zachytávanej skupine naše číslo:

pythonprint(res[1]) # vypíše '123'