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:
txt = 'abab123'
res = re.search('(ab)+([1-9]+)', txt)
W rezultacie w naszych kieszeniach będzie następująco:
print(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:
txt = 'abab123'
res = re.search('(?:ab)+([1-9]+)', txt)
W rezultacie w pierwszej kieszeni będzie nasza liczba:
print(res[1]) # wypisze '123'