用不同的替换值替换相同的模式

Tax*_*ney 2 python regex

我有这样的文件(这是一个简化版本):

james sfsf qef qef
qef qef qe fff
qqew james james qef
qefq ffgrsf wsef 
qef james eq james
Run Code Online (Sandbox Code Playgroud)

我想用不同的值替换'james'的每次迭代.这是我在测试代码中的内容:

f=open('file_to_be_read.txt','r')
text=f.read()
matches=len(re.findall('james',text))
f.close()
number=0
for x in range(matches):
    new_text=re.sub(r'james',str(number),text,count=1)
    number+=1
r=open('result_file.txt','w')
r.write(new_text)
r.close()
Run Code Online (Sandbox Code Playgroud)

但它只是将第一个'james'替换为2.而不是产生我想要的以下结果:

1 sfsf qef qef
qef qef qe fff
qqew 2 3 qef
qefq ffgrsf wsef 
qef 4 eq 5
Run Code Online (Sandbox Code Playgroud)

我想通过重复带有count = 1的re.sub,我每次都会替换1个詹姆斯但允许我更改替换值.

Ash*_*ary 6

我建议使用itertools.count这个:

>>> from itertools import count
>>> import re
>>> s = '''james sfsf qef qef
qef qef qe fff
qqew james james qef
qefq ffgrsf wsef
qef james eq james'''
>>> print re.sub(r'james', lambda x, c=count(1): str(next(c)), s)
1 sfsf qef qef
qef qef qe fff
qqew 2 3 qef
qefq ffgrsf wsef
qef 4 eq 5
Run Code Online (Sandbox Code Playgroud)

c=count(1)是一个默认参数值,它只计算一次(当创建函数对象时),对此函数的下一次调用将每次递增先前的计数.