一、正则表达式常见匹配字符快速回顾
符号描述.匹配处换行符\n之外恣意1个字符[]匹配[]中恣意一个\d一个0-9数字\D匹配非数字\w匹配单词字符:a-z、A-Z、0-9\W匹配非单词字符\s匹配空格、tab健\S匹配非空格,tab健 常用的匹配规则-匹配字符数量
- 匹配前一个字符出现0次大概无数次
- 匹配前一个字符出现1次大概无数次
符号描述?匹配前一个字符出现0次大概1次{m}匹配前一个字符出现m次{m,}匹配前一个字符出现至少m次{n,m}匹配前一个字符出现n-m次^匹配字符串开头$匹配字符串末了|或(ab)将括号中字符作为一个分组 二、 实战:正则表达式判断IPv4地点合法性
python正则表达式处理re.match()函数,可以对字符举行匹配,查找的位置是从指定的位置开始一直往后找,返回第一个符合规则的对象,如果开始位置不符合匹配队形则返回None。而如果从起始位置开始没有匹配乐成,即便其他部分包含必要匹配的内容,re.match()也会返回None。
忘记的同学可以去看上篇文章解说
- 问题:假设有一个IP地点,如ip = ‘10.10.10.10’,怎样检测IPV4的IP地点格式是否精确?
分析
IPV4地点分四段,分别为:(1-255).(0-255).(0-255).(0-255)
第一段分析,有以下5种环境:
1-91位数,由于是第一段,因此不能取0,1-9恣意取10-991开头两位数,个位数0-9恣意取100-1991开头三位数,十位数和个位数0-9恣意取200-2492开头三位数,当十位数为0-4时(即250以内),个位数0-9恣意取250-2552开头三位数,当十位数为5时(大于等于250),个位数只能取0-5 这五种环境对应的正则如下:
1-9[1-9]10-99[1-9]\d100-1991\d\d200-2492[0-4]\d250-25525[0-5] 组合起来就是:
- [1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]
复制代码 加个小括号组合起来:
- ([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]
- )
复制代码 后三段环境均一样,有以下5中环境:
0-91位数,0-9恣意取,唯一与第一段有区别的地方10-991开头两位数,个位数0-9恣意取100-1991开头三位数,十位数和个位数0-9恣意取200-2492开头三位数,当十位数为0-4时(即250以内),个位数0-9恣意取250-2552开头三位数,当十位数为5时(大于等于250),个位数只能取0-5 这五种环境对应的正则如下:
0-9\d10-99[1-9]\d100-1991\d\d200-2492[0-4]\d250-25525[0-5] 组合起来就是
- \d|\[1-9]\d|1\d\d|2[0-4]\d|25[0-5]
复制代码 第四段最后必要加上末了符号:$。表示停止匹配。
最终结果:
- import reip1 = '100.10.10.253'print(re.match(r'([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]
- ).(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]).(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]).(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$',ip1))*******************print*********************************<re.Match object; span=(0, 13), match='100.10.10.253'>ip2 = '0.10.10.253'print(re.match(r'([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]
- ).(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]).(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]).(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$',ip2))*******************print*********************************None
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |