Neohranjevalni oklepaji v regularnih izrazih Python

Oklepaji ( ) izvajajo dve funkciji - grupiranje znakov in funkcijo captured group (zajema skupine). A kaj narediti, če je treba združiti, vendar ne shraniti v captured group? Za rešitev takšnega problema so bili izumljeni posebni neohranjevalni oklepaji (?: ) - ti združujejo, vendar ne shranijo v captured group.

Primer

V naslednjem primeru so prvi oklepaji potrebni za grupiranje, drugi pa za captured group. Vendar pa tako eni kot drugi oklepaji shranjujejo podatke v captured group:

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

Kot rezultat bo v naših captured groupih (skupinah) naslednje:

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

Primer

Naredimo tako, da bo prvi par oklepajev samo združeval, ne pa tudi shranjeval v captured group:

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

Kot rezultat bo v našem prvem captured groupu naše število:

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