我相信re.sub()正在取代Full Match,但在这种情况下我只想替换匹配的组并忽略非捕获组。我怎么能这样做呢?
string = 'aBCDeFGH'
print(re.sub('(a)?(?:[A-Z]{3})(e)?(?:[A-Z]{3})', '+', string))
输出是:
+
预期输出为:
+BCD+FGH
答案 0 :(得分:5)
此类问题的一般解决方案是在替换中使用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))