Non-capturing скоби в регулярните изрази на Python
Скобите ( ) изпълняват две функции -
групиране на символи и функция на capturing група. А
какво да правим, ако трябва да групираме, но
да не capture-ваме в група? За решаване на такъв
проблем са създадени специални non-capturing
скоби (?: ) - те групират,
но не създават capturing група.
Пример
В следващия пример първите скоби са ни нужни за групиране, а вторите - за capturing група. Обаче, и двете скоби запазват данни в capturing група:
txt = 'abab123'
res = re.search('(ab)+([1-9]+)', txt)
В резултат в нашите capturing групи ще има следното:
print(res[0]) # ще изведе 'abab123'
print(res[1]) # ще изведе 'ab'
print(res[2]) # ще изведе '123'
Пример
Нека направим така, че първата двойка скоби само да групира, но да не създава capturing група:
txt = 'abab123'
res = re.search('(?:ab)+([1-9]+)', txt)
В резултат в първата capturing група ще бъде нашето число:
print(res[1]) # ще изведе '123'