Вот способ сделать это на Python
import re
from itertools import count
s="""
% line one
% line two
% line three"""
def f():
n=count(1)
def inner(m):
return str(next(n))
return inner
new_s = re.sub("%",f(),s)
или вы можете использовать там лямбда-функцию, например, так:
new_s = re.sub("%",lambda m,n=count(1):str(next(n)),s)
Но вообще проще и лучше пропустить регулярное выражение
from __future__ import print_function # For Python<3
import fileinput
f=fileinput.FileInput("file.txt", inplace=1)
for i,line in enumerate(f):
print ("{0}{1}".format(i, line[1:]), end="")
Поскольку все строки начинаются с "%", нет необходимости даже смотреть на этот первый символ