Icke-fångande parenteser i Pythons reguljära uttryck
Parenteser ( ) har två funktioner -
gruppering av tecken och funktionen att fånga (capture group). Men
vad gör man om man behöver gruppera, men
inte fånga? För att lösa detta problem
har speciella icke-fångande
parenteser (?: ) skapats - de grupperar,
men fångar inte.
Exempel
I följande exempel behöver vi den första parentesen för gruppering, och den andra - för att fånga. Men båda parenteserna fångar data:
txt = 'abab123'
res = re.search('(ab)+([1-9]+)', txt)
Som ett resultat kommer våra fångargrupper att innehålla följande:
print(res[0]) # skriver ut 'abab123'
print(res[1]) # skriver ut 'ab'
print(res[2]) # skriver ut '123'
Exempel
Låt oss se till att den första parentesen bara grupperar, men inte fångar:
txt = 'abab123'
res = re.search('(?:ab)+([1-9]+)', txt)
Som ett resultat kommer vår siffra att finnas i den första fångargruppen:
print(res[1]) # skriver ut '123'