大佬们,我是一个刚学Python的新手,最近看到正则表达式,有一个问题百思不得其解。就是图片里的这个字符串“127.0.0.1 192.168.1.66”,按照书中所写r"[1-9]{1,3}(\.[0-9]{1,3}{3}",匹配到的应该是(\.[0-9]{1,3})的结果,但是代码运行之后只有.1和.66为啥没有.0呀,这个不是也符合条件吗
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)
findall()函数有个特点,当正则表达式中有子匹配时,会忽略整体匹配的结果。只会获取子匹配的结果。
因为你正则表达式中()子匹配只有一个,只能保留一个子匹配的结果,
(.[0-9]{1,3})是正则中第一个子匹配,虽然这第一个子匹配重复匹配了3次。但是获取子匹配的结果都是第一次子匹配的结果,同一个子匹配只能保留一个结果,后面获取的会覆盖前面的。
图呢