Нужно заменить в строке совпадение с группой в регулярном выражении.
Пусть есть foo42buz, нужно получить foobarbuz
Очевидно, я сразу пытаюсь написать что-то такое
string = 'foo42buz'
pattern = re.compile(r'(\d+)buz')
re.sub(pattern,'bar',string)
Но это возвращает ту же foo42buz
Гуглю как заменить совпадение именно с группой и пытаюсь делать так
string = 'foo42buz'
pattern = re.compile(r'(\d+)buz')
re.sub(pattern,r'\1bar',string)
и так
string = 'foo42buz'
pattern = re.compile(r'(\d+)buz')
re.sub(pattern,r'\g<1>bar',string)
и даже так
string = 'foo42buz'
pattern = re.compile(r'(?P
Но re.sub ведет себя очень неочевидным для меня образом, возвращая foo42buz
Попробую еще раз. Есть строка, есть регулярка с группой. Необходимо в строке подстроку совпадающую с группой заменить на другую подстроку.
Есть строка foo42buz, есть регулярка (\d+)buz, где группа (\d+) совпадает с подстрокой 42. Нужно заменить это совпадение другой строкой bar, чтобы получилась в итоге строка foobarbuz
Ответ
Еще 1 вариант, но это экзотика :)
>>> re.sub(re.findall(r'(\d+)buz', string)[0], 'bar', string)
'foobarbuz'
Комментариев нет:
Отправить комментарий