即使使用非捕获组,Python re.sub() 也会替换完整匹配[重复]

2024-01-10

我相信 re.sub() 正在替换完整匹配,但在这种情况下,我只想替换匹配组并忽略非捕获组。我该怎么办?

string = 'aBCDeFGH'

print(re.sub('(a)?(?:[A-Z]{3})(e)?(?:[A-Z]{3})', '+', string))

输出是:

+

预期输出是:

+BCD+FGH

此类问题的一般解决方案是在替换中使用 lambda:

string = 'aBCDeFGH'

print(re.sub('(a)?([A-Z]{3})(e)?([A-Z]{3})', lambda match: '+%s+%s' % (match.group(2), match.group(4)), string))

但是,正如 bro-grammer 所评论的那样,在这种情况下您可以使用反向引用:

print(re.sub('(a)?([A-Z]{3})(e)?([A-Z]{3})', r'+\2+\4', string))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

即使使用非捕获组,Python re.sub() 也会替换完整匹配[重复] 的相关文章

随机推荐