我相信re.sub()会替换完全匹配项,但是在这种情况下,我只想替换匹配的组,而忽略非捕获组。我该怎么办?
string = 'aBCDeFGH'
print(re.sub('(a)?(?:[A-Z]{3})(e)?(?:[A-Z]{3})', '+', string))
Run Code Online (Sandbox Code Playgroud)
输出是:
+
Run Code Online (Sandbox Code Playgroud)
预期输出为:
+BCD+FGH
Run Code Online (Sandbox Code Playgroud)
    解决此类问题的一般方法是在替换中使用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))
Run Code Online (Sandbox Code Playgroud)
但是,正如bro-grammer所说,在这种情况下,您可以使用反向引用:
print(re.sub('(a)?([A-Z]{3})(e)?([A-Z]{3})', r'+\2+\4', string))
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           1515 次  |  
        
|   最近记录:  |