Метод re.sub
может принимать функцию в качестве второго аргумента.Используйте функцию с состоянием с объектом itertools.count
в качестве счетчика.
Код
import re, itertools
s = 'This is line ABC XYZ. This is something. This is ABC XYZ. foo. This is ABC XYZ. foo'
def enumerator():
counter = itertools.count(1)
return lambda m: '{} {}'.format(next(counter), m.group())
out = re.sub(r'ABC XYZ', enumerator(), s)
print(out)
Функция enumerator
может быть повторно использована для любого шаблона.
Выход
This is line 1 ABC XYZ. This is something. This is 2 ABC XYZ. foo. This is 3 ABC XYZ. foo