我有以下内容:

>>> re.sub('(..)+?/story','\\g<1>','money/story')
'mey'
>>>


为什么捕获组1是money的前一个字母和后两个字母,而不是前两个字母?

最佳答案

第一个捕获组根本不包含m(..)+?/story匹配的是oney/story

(..)+?匹配偶数个字符,因此匹配以下字符(隔开以使其更清楚):

m o n e y / s t o r y
  ^-^ ^-^


然后替换是第一个捕获组。您可能不知道的是,当您有一个重复的捕获组(在本例中为(..)+?)时,仅保留最后一个捕获组。

总而言之,oney/story是匹配的,并用ey代替,因此结果是mey

关于python - 解释这个行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27615277/

10-13 04:21