鱼C论坛

 找回密码
 立即注册
查看: 1055|回复: 1

[已解决]正则表达式的一个问题,([abc])+和([abc]+)的区别

[复制链接]
发表于 2018-1-22 22:05:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在看如何优雅地使用正则表达式
代码如下
>>> m = re.match("([abc])+", "abc")         
>>> m.groups()
('c',)

我很奇怪,为什么这里groups返回的是一个'c',而不是'a'或者'b'
最佳答案
2018-1-23 00:46:36
一般情况下 [abc] 会返回最先匹配成功的任意一个字符,即是 ‘a’
但是 [abc] 后面加了 '+' , 而  '+'的匹配模式是贪婪模式,也即是尽可能多的去匹配符合规则的字符,
那么问题来了 [abc] ,中三个字符都很贪心想去匹配字符,但是结果只能是一个,那么 ' c '很幸运排在最后,
所以返回了 ' c '
#一般情况下
>>> m = re.match("([abc])","abc")
>>> m.groups()
('a',)
#贪婪模式下
>>> m = re.match("([abc])+","abc")
>>> m.groups()
('c',)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-23 00:46:36 | 显示全部楼层    本楼为最佳答案   
一般情况下 [abc] 会返回最先匹配成功的任意一个字符,即是 ‘a’
但是 [abc] 后面加了 '+' , 而  '+'的匹配模式是贪婪模式,也即是尽可能多的去匹配符合规则的字符,
那么问题来了 [abc] ,中三个字符都很贪心想去匹配字符,但是结果只能是一个,那么 ' c '很幸运排在最后,
所以返回了 ' c '
#一般情况下
>>> m = re.match("([abc])","abc")
>>> m.groups()
('a',)
#贪婪模式下
>>> m = re.match("([abc])+","abc")
>>> m.groups()
('c',)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 09:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表