我有一个这样的文件(这是一个简化版本):
james sfsf qef qef
qef qef qe fff
qqew james james qef
qefq ffgrsf wsef
qef james eq james
我想用不同的值替换“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()
但它只是用 2 替换了第一个“james”。而不是产生我想要的以下结果:
1 sfsf qef qef
qef qef qe fff
qqew 2 3 qef
qefq ffgrsf wsef
qef 4 eq 5
我认为通过使用 count=1 重复 re.sub 我每次都会替换 1 个 james 但允许我更改替换值。
最佳答案
我建议使用 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
这里的 c=count(1)
是一个默认的参数值,它只会被计算一次(当函数对象被创建时),下次调用这个函数将会递增以前每次都计数。
关于python - 用不同的替换值替换相同的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32182578/