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:
txt = 'abab123'
res = re.search('(ab)+([1-9]+)', txt)
Som et resultat vil fangstgruppene våre inneholde følgende:
print(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:
txt = 'abab123'
res = re.search('(?:ab)+([1-9]+)', txt)
Som et resultat vil tallet vårt være i den første fangstgruppen:
print(res[1]) # vil skrive ut '123'