我相信 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(使用前将#替换为@)