Вот более базовый подход IMO, и, вероятно, более читабельный:
import re
s = 'hello %0, how %2 do you come to %1?'
replacements = ['world','stack overflow','often']
for match in re.findall(r'\%[0-9]+', s):
s = re.sub(match, replacements[int(re.sub(r'\%','',match))], s)
Выход:
'hello world, how often do you come to stack overflow?'
Пояснение:
re.findall(r'\%[0-9]+', s)
находит все %0
, %2
, %1
и т. Д. В строке s
Для каждого из этих совпадений используйте re.sub()
для замены в соответствующей строке из replacements
. Переберите все совпадения, которые необходимо заменить.