已有183人关注
findall 匹配问题
还有0人有此问题
发表在Python图书答疑 2020-07-19 《零基础学Python》
是否精华
版块置顶:
import re
pattern = r'[1-9]{1,3}(.[0-9]{1,3}){3}'
str1 = '127.0.0.1 192.168.1.66'
match = re.findall(pattern,str1)
print(match)

这个运行结果 应该是

(.[0-9]{1,3})

分组匹配的结果,但是为什么是 [ '.1' , '.66'  ] ???



分享到:
精彩评论 7
无语_mrkj
学分:3155 LV11
2020-07-21
沙发

第一步:(\.[0-9]{1,3}):匹配带.的且,最小匹配10-9,最大匹配30-9的数字

结果是:['.0', '.0', '.1', '.168', '.1', '.66']

第二步:(\.[0-9]{1,3}){3}

对结果['.0', '.0', '.1', '.168', '.1', '.66']再次匹配,{3}对其之前的正则式指定匹配3重复.0-9的,那么.1符合3个重复,因为它前面是.0.0,到.1正好是第3个,继续匹配,到.66符合。

最后结果是:['.1', '.66'] 


r3b0rn
学分:24 LV2
2021-02-08
板凳

因为只匹配了

(.[0-9]{1,3})

这里的规则

我也刚学到这里

海檬果
学分:43 LV2
2021-06-04
地板

无语_mrkj 发表于2020-07-21 13:56

第一步:(\.[0-9]{1,3}):匹配带.的且,最小匹配10-9,最大匹配30-9的数字

结果是:['.0', '.0', '.1', '.168', '.1', '.66']

第二步:(\.[0-9]{1,3}){3}

对结果['.0', '.0', '.1', '.168', '.1', '.66']再次匹配,{3}对其之前的正则式指定匹配3重复.0-9的,那么.1符合3个重复,因为它前面是.0.0,到.1正好是第3个,继续匹配,到.66符合。

最后结果是:['.1', '.66'] 


第一步能理解,对字符串{3}也能明白,比如go{3}gle,就是gooogle。

但对象是列表就弄不明白了~虽然解释了,但还是不明白 ,哎,尴尬~  对象是列表 ['.0', '.0', '.1', '.168', '.1', '.66'],(\.[0-9]{1,3}){3},匹配3个重复带.的0-9的,为什么就是第3个['.1','.66'],而不是[['.0', '.0', '.1'],['.168', '.1', '.66']]呢


李世民
学分:50 LV3
2021-07-30
4L

这孩子没救了用ldle


憨出出
学分:0 LV1
2021-08-06
5L

无语_mrkj 发表于2020-07-21 13:56

第一步:(\.[0-9]{1,3}):匹配带.的且,最小匹配10-9,最大匹配30-9的数字

结果是:['.0', '.0', '.1', '.168', '.1', '.66']

第二步:(\.[0-9]{1,3}){3}

对结果['.0', '.0', '.1', '.168', '.1', '.66']再次匹配,{3}对其之前的正则式指定匹配3重复.0-9的,那么.1符合3个重复,因为它前面是.0.0,到.1正好是第3个,继续匹配,到.66符合。

最后结果是:['.1', '.66'] 


感觉好难啊

我心飞翔_1642465977
学分:28 LV2
2022-01-13
6L

憨出出 发表于2021-08-06 00:11

感觉好难啊

我觉得正则表达式要多折腾才能明白

game99258
学分:2266 LV10
2022-06-11
7L

李世民 发表于2021-07-30 08:29

这孩子没救了用ldle


IDLE吧

首页上一页 1 下一页尾页 7 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照