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í:
txt = 'abab123'
res = re.search('(ab)+([1-9]+)', txt)
Výsledkem bude v našich zachyceních následující:
print(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:
txt = 'abab123'
res = re.search('(?:ab)+([1-9]+)', txt)
Výsledkem bude v našem prvním zachycení naše číslo:
print(res[1]) # vypíše '123'