鱼C论坛

 找回密码
 立即注册
查看: 2288|回复: 2

[已解决]关于re.findall和re.search查找规则上的差异

[复制链接]
发表于 2016-11-6 00:08:49 | 显示全部楼层 |阅读模式

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

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

x
  1. re.findall(r'\d{3}','123,231,321,234,543')
  2. ['123', '231', '321', '234', '543']
  3. >>> re.findall(r'(\d){3}','123,231,321,234,543')
  4. ['3', '1', '1', '4', '3']
  5. >>> re.search(r'(\d){3}','123,231,321,234,543')
  6. <_sre.SRE_Match object; span=(0, 3), match='123'>
复制代码


python3.4,今天尝试re的时候发现这个问题,在findall里面加小括号后再规定重复次数,结果和想的不一样,而在search里面正常。
不知道背后是什么机制?
最佳答案
2017-10-21 10:53:48
区别是有的,具体解释如下:
01.re.findall(r'\d{3}','123,231,321,234,543')  连续匹配3个数字,并返回被匹配的3个数字;
03.>>> re.findall(r'(\d){3}','123,231,321,234,543') 连续匹配3个数字,并返回最后一个(小括号内的数字个数)被匹配的数字
05.>>> re.search(r'(\d){3}','123,231,321,234,543') 连续匹配3个数字,并返回首次匹配成功时的位置







小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-11-6 09:37:34 | 显示全部楼层
findall 优先返回括号里面的分组
没括号才返回整个表达式匹配到的内容
(\d)只包含了1个数字
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-21 10:53:48 | 显示全部楼层    本楼为最佳答案   
区别是有的,具体解释如下:
01.re.findall(r'\d{3}','123,231,321,234,543')  连续匹配3个数字,并返回被匹配的3个数字;
03.>>> re.findall(r'(\d){3}','123,231,321,234,543') 连续匹配3个数字,并返回最后一个(小括号内的数字个数)被匹配的数字
05.>>> re.search(r'(\d){3}','123,231,321,234,543') 连续匹配3个数字,并返回首次匹配成功时的位置







小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-23 17:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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