gpt4 book ai didi

python - 我如何知道正则表达式 subn 的 repl 函数中的匹配索引

转载 作者:太空狗 更新时间:2023-10-30 02:43:33 25 4
gpt4 key购买 nike

假设我有以下字符串:

a<firstIndex>b<secondIndex>c<thirdIndex>

而且我想替换所有出现的 r'<\w+Index>'有一个对应于比赛号码的号码。所以给定上面的字符串,返回值将是:

a1b2c3

我知道有很多方法可以在代码中实现这一点(例如,通过编写一个带有跟踪匹配索引的计数器的类),但我想知道是否仅通过标准库函数就可以做到这一点。

我想,更具体地说,我想知道您是否可以从 MatchObject 中获得此信息传递给 repl 的对象 subn 中使用的函数.

最佳答案

阅读 re.sub 的文档. re.sub(和re.subn)可以将一个函数作为替换参数,而不仅仅是一个str。如果您将一个函数(实际上,任何可调用函数)作为 repl 传递,它会在每次匹配时被调用,匹配对象作为唯一参数。

虽然 match 对象不会告诉您发生了多少次匹配,但您可以使用它接受任何 callable 的事实来创建您自己的类来跟踪它给你。例如:

class Replacer:  # On Py2, use class Replacer(object): to explicitly use new style classes
def __init__(self):
self.matchcnt = 0
def __call__(self, matchobj):
self.matchcnt += 1
return matchobj.group(0) + str(self.matchcnt)

当你调用re.sub/re.subn时,你构建并传递Replacer()作为repl;它使用新的 matchcnt 初始化一个新对象,并且因为它定义了 __call__,所以它就像一个有状态的函数;每次匹配和替换时,对象状态都会递增,因此它将在后续替换中使用下一个数字。当 sub 完成时,该对象将被处理掉,并为后续的 sub 创建另一个对象重新开始计数。

关于python - 我如何知道正则表达式 subn 的 repl 函数中的匹配索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32980674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com