Ikke-fangende parenteser i Python regex

Parenteser ( ) har to funksjoner - gruppering av tegn og fangstfunksjon. Men hva gjør du hvis du trenger å gruppere, men ikke fange? For å løse dette problemet ble spesielle ikke-fangende parenteser (?: ) oppfunnet - de grupperer, men legger ikke inn i fangstgruppen.

Eksempel

I det følgende eksempelet trenger vi de første parentesene for gruppering, og de andre - for fangst. Imidlertid lagrer begge typer parenteser data i fangstgrupper:

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

Som et resultat vil fangstgruppene våre inneholde følgende:

pythonprint(res[0]) # vil skrive ut 'abab123'
print(res[1]) # vil skrive ut 'ab'
print(res[2]) # vil skrive ut '123'

Eksempel

La oss gjøre slik at det første paret med parenteser kun grupperer, men ikke legger inn i fangstgruppen:

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

Som et resultat vil tallet vårt være i den første fangstgruppen:

pythonprint(res[1]) # vil skrive ut '123'