首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >解释这件事的行为

解释这件事的行为
EN

Stack Overflow用户
提问于 2014-12-23 06:38:24
回答 2查看 29关注 0票数 1

我有以下几点:

代码语言:javascript
复制
>>> re.sub('(..)+?/story','\\g<1>','money/story')
'mey'
>>>

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-23 06:46:21

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

(..)+?匹配偶数的字符,因此匹配以下字符(空格以使其更清晰):

代码语言:javascript
复制
m o n e y / s t o r y
  ^-^ ^-^

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

总之,oney/story是匹配的,并替换为ey,因此结果是mey

票数 1
EN

Stack Overflow用户

发布于 2014-12-23 06:42:29

因为字符串money包含5个字母(奇数)不偶数,所以它甚至不匹配第一个字母m(..)+?捕获两个字符,不贪婪地重复模式一次或多次。由于重复量词+存在于捕获组的旁边,因此它将捕获匹配的最后两个字符。现在,捕获的组包含由此(..)+?模式完成的匹配的最后两个字符。因此,您将ey作为捕获的字符串,而不是第一个on。因此,通过将所有匹配的字符替换为组索引1中的字符串,ey将为您提供mey

演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27615277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档