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:

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

Som ett resultat kommer våra fångargrupper att innehålla följande:

pythonprint(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:

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

Som ett resultat kommer vår siffra att finnas i den första fångargruppen:

pythonprint(res[1]) # skriver ut '123'