我将在对象中使用re.sub和一个跟踪匹配项的替换函数,以避免使用全局变量。在s = "hello world "*30
import re
class RepObj:
def __init__(self,replace_by,every):
self.__counter = 0
self.__every = every
self.__replace_by = replace_by
def doit(self,m):
rval = m.group(1) if self.__counter % self.__every else self.__replace_by
self.__counter += 1
return rval
r = RepObj("earth",5) # init replacement object with replacement and freq
result = re.sub("(world)",r.doit,s)
print(result)
结果:
^{pr2}$
编辑:不需要helper对象,感谢Jon Clements(一如既往的智能解决方案),使用lambda和counter创建一个行程序:import re,itertools
s = "hello world "*30
result = re.sub('(world)', lambda m, c=itertools.count(): m.group() if next(c) % 5 else 'earth', s)
您可以调整计数器以满足您的特殊需要,并使其非常复杂,因为逻辑允许这样做。在