re.sub('a(b)','d','abc')
产生dc
,而不是adc
.
为什么re.sub
会取代整个捕获组,而不仅仅是捕获组(b)?
re.sub('a(b)','d','abc')
产生dc
,而不是adc
.
为什么re.sub
会取代整个捕获组,而不仅仅是捕获组(b)?
因为它应该取代整个模式的出现:
返回通过替换repl替换字符串中模式的最左侧非重叠出现而获得的字符串.
如果只替换一些子组,那么包含多个组的复杂正则表达式就行不通了.有几种可能的解决方案:
re.sub('ab', 'ad', 'abc')
-我最喜欢的,因为它非常可读且明确.re.sub('(a)b', r'\1d', 'abc')
repl
参数,并使其处理Match
对象并返回所需结果.re.sub('(?<=a)b', r'd', 'abxb')
产生adxb
.小组开头的?<=
表示"这是一个展望".