- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
假设我有以下字符串:
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/
假设我有以下字符串: abc 而且我想替换所有出现的 r''有一个对应于比赛号码的号码。所以给定上面的字符串,返回值将是: a1b2c3 我知道有很多方法可以在代码中实现这一点(例如,通过编写一个带有
python正则表达式模块简介 Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。Python 1.5之前版本则是通过 regex 模块提供 Emacs 风格的
我是一名优秀的程序员,十分优秀!