Карманы в строке замены в Python
При работе с методом sub, если
что-то нужно положить в карман в регулярке, то
в строке замены можно вставить содержимое
этого кармана написав двойной слеш \\
и номер кармана. Например, \\1 - первый
карман, \\2 - второй карман и
так далее.
Зачем это нужно и как этим пользоваться давайте посмотрим на примерах.
Пример
Давайте найдем все числа и вместо них вставим эти же числа, но в круглых скобках. Для этого все найденные числа заменим на них самих же, но в скобках:
txt = '1 23 456 xax'
res = re.sub('(\d+)', '(\\1)', txt)
print(res)
В результате в переменную запишется следующее:
'(1) (23) (456) xax'
Пример
Давайте найдем все строки, представляющие
собой числа с иксами вокруг и заменим эти
числа на них же, но с '!'
знаками вокруг:
txt = 'x1x x23x x456x xax'
res = re.sub('x(\d+)x', '!\\1!', txt)
print(res)
В результате в переменную запишется следующее:
'!1! !23! !456! xax'
Пример
Давайте решим следующую задачу: дана строка
'aaa@bbb ссс@ddd' - буквы, потом собака,
потом буквы. Нужно поменять местами буквы
в подстроке 'aaa@bbb' до '@'
и после:
txt = 'aaa@bbb ссс@ddd'
res = re.sub('([a-z]+)@([a-z]+)', '\\2@\\1', txt)
print(res)
В результате в переменную запишется следующее:
'bbb@aaa ссс@ddd'
Практические задачи
Дана строка:
txt = '12 34 56 78'
Поменяйте местами цифры во всех двухзначных числах.
Дана строка с датой:
txt = '31.12.2025'
Преобразуйте эту дату в '2025.12.31'.