Несохраняющие скобки в регулярках 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'