Python regular ifadelerinde saklamayan ýaýlary

Ýaýlar ( ) iki wezipäni ýerine ýetirýär - nyşanlary toparlaşdyrmak we karman wezipesi. Eger toparlaşdyrmak zerur, ýöne karmana goýmaly däl bolsa? Beýle bir meseleni çözmek üçin aýratyn saklamayan ýaýlar (?: ) oýlanyp tapyldy - olar toparlaşdyrýar, ýöne karmana goýmaz.

Mysal

Aşakdaky mysalda birinji ýaýlar biz üçin toparlaşdyrmak üçin zerur, ikinjileri bolsa karman üçin. Ýöne, her iki ýaýlar hem maglumatlary karmana saklaýar:

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

Netijede biziň karmanlarymyzda aşakdakylar bolar:

pythonprint(res[0]) # 'abab123' çykarar
print(res[1]) # 'ab' çykarar
print(res[2]) # '123' çykarar

Mysal

Indi birinji ýaý çübüniň diňe toparlaşdyryp, ýöne karmana goýmaz ýaly edeliň:

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

Netijede birinji karmanda biziň sanymyz bolar:

pythonprint(res[1]) # '123' çykarar