我有以下几点:
>>> re.sub('(..)+?/story','\\g<1>','money/story')
'mey'
>>>为什么捕获组1是money的第一个字母和最后两个字母,而不是前两个字母?
发布于 2014-12-23 06:46:21
第一个捕获组根本不包含m。(..)+?/story正在与之匹配的是oney/story。
(..)+?匹配偶数的字符,因此匹配以下字符(空格以使其更清晰):
m o n e y / s t o r y
^-^ ^-^然后替换是第一个捕获组。您可能不知道的是,当您有一个重复捕获组(在本例中是(..)+?)时,那么只保留最后一个捕获组。
总之,oney/story是匹配的,并替换为ey,因此结果是mey。
发布于 2014-12-23 06:42:29
因为字符串money包含5个字母(奇数)不偶数,所以它甚至不匹配第一个字母m。(..)+?捕获两个字符,不贪婪地重复模式一次或多次。由于重复量词+存在于捕获组的旁边,因此它将捕获匹配的最后两个字符。现在,捕获的组包含由此(..)+?模式完成的匹配的最后两个字符。因此,您将ey作为捕获的字符串,而不是第一个on。因此,通过将所有匹配的字符替换为组索引1中的字符串,ey将为您提供mey。
https://stackoverflow.com/questions/27615277
复制相似问题