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' ] ???
无语_mrkj 发表于2020-07-21 13:56
第一步:(\.[0-9]{1,3}):匹配带.的且,最小匹配1个0-9,最大匹配3个0-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']]呢
无语_mrkj 发表于2020-07-21 13:56
第一步:(\.[0-9]{1,3}):匹配带.的且,最小匹配1个0-9,最大匹配3个0-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']
感觉好难啊