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:
txt = 'abab123'
res = re.search('(ab)+([1-9]+)', txt)
V dôsledku budeme mať v našich zachytených skupinách nasledovné:
print(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:
txt = 'abab123'
res = re.search('(?:ab)+([1-9]+)', txt)
V dôsledku bude v prvej zachytávanej skupine naše číslo:
print(res[1]) # vypíše '123'