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

标签 python regex

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

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/

相关文章:

正则表达式:如何删除每行冒号之前的所有内容

python - 迭代python中的两个字典

python - 使用 pyodbc 读取 SSMS 输出消息

python - 当一个数据帧为空时迭代两个 pandas 数据帧错误

python - 将多个 PDF 合并为一个 PDF

regex - 从 netstat 命令中提取端口号

regex - 使用 RewriteRule 从重定向中删除主题标签

php - 正则表达式从 HTML 中删除 id 属性

python - 如何在 Deviare 挂机时跳过通话?

javascript - 使用正则表达式替换或删除 javascript 中两个字符之间的特定字符