Պայթոնի ռեգուլյար արտահայտություններում չպահպանող փակագծերը

Փակագծերը ( ) կատարում են երկու ֆունկցիա - նիշերի խմբավորում և պոկետի ֆունկցիա: Իսկ ի՞նչ անել, եթե պետք է խմբավորել, բայց պոկետի մեջ չդնել: Նման խնդիրը լուծելու համար ստեղծվել են հատուկ չպահպանող փակագծեր (?: ) - դրանք խմբավորում են, բայց չեն դնում պոկետի մեջ:

Օրինակ

Հաջորդ օրինակում առաջին փակագծերը մեզ անհրաժեշտ են խմբավորման համար, իսկ երկրորդները՝ պոկետի համար: Սակայն, և՛ մեկը, և՛ մյուս փակագծերը պահպանում են տվյալները պոկետում:

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

Արդյունքում մեր պոկետներում կլինի հետևյալը:

pythonprint(res[0]) # կարտածի 'abab123'
print(res[1]) # կարտածի 'ab'
print(res[2]) # կարտածի '123'

Օրինակ

Եկեք անենք, որ առաջին զույգ փակագծերը միայն խմբավորեն, բայց չդնեն պոկետի մեջ:

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

Արդյունքում առաջին պոկետում կլինի մեր թիվը:

pythonprint(res[1]) # կարտածի '123'