Niezachowujące nawiasy w wyrażeniach regularnych Pythona

Nawiasy ( ) pełnią dwie funkcje - grupowanie znaków i funkcję kieszeni. A co zrobić, jeśli trzeba pogrupować, ale nie chcesz umieszczać w kieszeni? Aby rozwiązać ten problem, wymyślono specjalne niezachowujące nawiasy (?: ) - grupują, ale nie umieszczają w kieszeni.

Przykład

W następnym przykładzie pierwsze nawiasy są nam potrzebne do grupowania, a drugie - do kieszeni. Jednakże zarówno jedne, jak i drugie nawiasy zachowują dane do kieszeni:

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

W rezultacie w naszych kieszeniach będzie następująco:

pythonprint(res[0]) # wypisze 'abab123'
print(res[1]) # wypisze 'ab'
print(res[2]) # wypisze '123'

Przykład

Sprawmy, aby pierwsza para nawiasów tylko grupowała, ale nie umieszczała w kieszeni:

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

W rezultacie w pierwszej kieszeni będzie nasza liczba:

pythonprint(res[1]) # wypisze '123'