Ikke-fangende parenteser i Python regex
Parenteser ( ) udfører to funktioner -
gruppering af tegn og fangstfunktion. Men
hvad gør man, hvis man skal gruppere, men
ikke fange? For at løse dette problem er
specielle ikke-fangende parenteser (?: ) opfundet - de grupperer,
men fanger ikke.
Eksempel
I det følgende eksempel har vi brug for de første parenteser til gruppering, og de anden - til fangst. Dog fanger begge typer parenteser data:
txt = 'abab123'
res = re.search('(ab)+([1-9]+)', txt)
Som et resultat vil der være følgende i vores fangstgrupper:
print(res[0]) # vil udskrive 'abab123'
print(res[1]) # vil udskrive 'ab'
print(res[2]) # vil udskrive '123'
Eksempel
Lad os sikre, at det første par parenteser kun grupperer, men ikke fanger:
txt = 'abab123'
res = re.search('(?:ab)+([1-9]+)', txt)
Som et resultat vil vores nummer være i den første fangstgruppe:
print(res[1]) # vil udskrive '123'