Nezachytávající závorky v regulárních výrazech Pythonu

Závorky ( ) plní dvě funkce - seskupování znaků a funkci zachycování. A co dělat, když je potřeba seskupit, ale nezachytit? Pro řešení tohoto problému byly vytvořeny speciální nezachytávající závorky (?: ) - ty seskupují, ale nezachycují.

Příklad

V následujícím příkladu potřebujeme první závorky pro seskupení a druhé - pro zachycení. Avšak oboje závorky ukládají data do zachycení:

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

Výsledkem bude v našich zachyceních následující:

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

Příklad

Upravme to tak, aby první pár závorek pouze seskupoval, ale nezachycoval:

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

Výsledkem bude v našem prvním zachycení naše číslo:

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