
我已经为此苦苦挣扎了一段时间,但是我找到了一个我认为非常pythonic的解决方案:
>>> def nth_matcher(n, replacement):... def alternate(n):... i=0... while True:... i += 1... yield i%n == 0... gen = alternate(n)... def match(m):... replace = gen.next()... if replace:... return replacement... else:... return m.group(0)... return match... ... >>> re.sub("([0-9])", nth_matcher(3, "X"), "1234567890")'12X45X78X0'编辑 :匹配器由两部分组成:
该
alternate(n)
功能。这将返回一个生成器,该生成器返回一个无限序列True / False,其中每个第n个值均为True。觉得像list(alternate(3)) == [False, False, True, False, False, True, False, ...]
。该
match(m)
功能。这是传递给的函数re.sub
:它获取alternate(n)
(gen.next()
)中的下一个值,如果是,True
它将替换匹配的值;否则,它将保持不变(将其自身替换)。
我希望这足够清楚。如果我的解释不明确,请这样说,我会改善的。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)