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

时间:2015-08-24 12:40:07

标签: python regex

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

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个詹姆斯,但允许我更改替换值。

2 个答案:

答案 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)