Nesaglabājošās iekavas Python regulārajās izteiksmēs

Iekavas ( ) veic divas funkcijas - simbolu grupēšanu un capture grupas funkciju. Bet ko darīt, ja nepieciešams sagrupēt, bet neielikt capture grupā? Šīs problēmas risināšanai tika izgudrotas speciālās nesaglabājošās iekavas (?: ) - tās grupē, bet neieliek capture grupā.

Piemērs

Nākamajā piemērā pirmās iekavas mums ir vajadzīgas grupēšanai, bet otrajās - capture grupai. Tomēr, gan vienas, gan otrās iekavas saglabā datus capture grupā:

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

Rezultātā mūsu capture grupās būs sekojošais:

pythonprint(res[0]) # izvadīs 'abab123'
print(res[1]) # izvadīs 'ab'
print(res[2]) # izvadīs '123'

Piemērs

Padarīsim tā, lai pirmā iekavu pāris tikai grupētu, bet neieliktu capture grupā:

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

Rezultātā pirmajā capture grupā būs mūsu skaitlis:

pythonprint(res[1]) # izvadīs '123'