我有这样的文件(这是简化版):
james sfsf qef qef
qef qef qe fff
qqew james james qef
qefq ffgrsf wsef
qef james eq 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.而不是产生我想要的以下结果:
1 sfsf qef qef
qef qef qe fff
qqew 2 3 qef
qefq ffgrsf wsef
qef 4 eq 5
我认为通过重复带有count = 1的re.sub,我每次都会替换1个詹姆斯,但允许我更改替换值。
答案 0 :(得分:2)
您要放弃更新后的字符串 - 试试这个:
text = re.sub(r'james', str(x), text, count=1)
答案 1 :(得分:0)
re.sub
可以将函数作为替换值。这大致与你想要的一样
import re
with open('file_to_be_read.txt', 'r') as f:
text = f.read()
number = 0
def do_replace( matchobj ):
global number
replacement = str(number)
number += 1
return replacement
new_text = re.sub(r'james', do_replace, text)
with open('result_file.txt', 'w') as r:
r.write(new_text)