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