Страницы

Поиск по вопросам

среда, 22 мая 2019 г.

Заменить группу в регулярном выражении python

Нужно заменить в строке совпадение с группой в регулярном выражении. Пусть есть 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\d+)buz') re.sub(pattern,r'\gbar',string)
Но re.sub ведет себя очень неочевидным для меня образом, возвращая foo42buz

Попробую еще раз. Есть строка, есть регулярка с группой. Необходимо в строке подстроку совпадающую с группой заменить на другую подстроку. Есть строка foo42buz, есть регулярка (\d+)buz, где группа (\d+) совпадает с подстрокой 42. Нужно заменить это совпадение другой строкой bar, чтобы получилась в итоге строка foobarbuz


Ответ

Еще 1 вариант, но это экзотика :)
>>> re.sub(re.findall(r'(\d+)buz', string)[0], 'bar', string) 'foobarbuz'

Комментариев нет:

Отправить комментарий