如何在python3中使用re模块替换模式

时间:2016-02-29 08:24:59

标签: regex string python-3.x replace

我想在一行中多次替换某些模式(字母表之间的空格)。
这是我的代码:

s = re.sub('([a-z]) ([a-z])', '\g<1>_\g<2>', 'series m coupe')

我希望将'series m coupe'替换为'series_m_coupe',但我得到的是'series_m coupe'。即使我放count=0,它也不起作用......

我猜是因为“m”是1个音节。当我把'系列迷你小轿车'等超过1个音节时,有效:

s = re.sub('([a-z]) ([a-z])', '\g<1>_\g<2>', 'series mini coupe')
s
'series_mini_coupe'

1 个答案:

答案 0 :(得分:1)

当您使用([a-z]) ([a-z])时,s mseries m coupe匹配,正则表达式索引位于m之后。因此,正则表达式引擎正在寻找该信之后的第二场比赛,并且找不到任何。

您需要使用前瞻来匹配重叠的字符串:

s = re.sub('([a-z]) (?=[a-z])', '\g<1>_', 'series m coupe')
                    ^^^     ^

请参阅regex demo

(?=[a-z])前瞻将检查空格是否后跟一个小写的ASCII字母,但不会消耗它。在替换模式中,应删除\g<2>,因为不再有第二个捕获组。