此题目可以使用正则表达式匹配或者字符串匹配方法进行判断
思路:
1、正则表达式方法
首先要表达出符合ipv4规范的ip正则表达式,ipv4的ip长度是4段,每段8位,共32位,用10进制表示,每段能表示的数字为0~255(2的8次方),每段用英文‘.’相隔,例如:192.168.0.1
分析ip的组成特点:250-255,200-249,0-199
这三种情况分开考虑:
250-255:三位数,百位是2,十位是5,个位是0-5,正则表达式可以表示为:25[0-5]
200-249:三位数,百位是2,十位是0-4,个位是0-9,正则表达式可以表示为:2[0-4]\d
0-199:可以继续依次拆分如下:
0-9:一位数,个位是0~9,用正则表达式可以写成:\d
10-99:两位数,十位是1-9,个位是0-9,用正则表示可以表示成:[1-9]\d
100-199:三位数,百位是1,十位是0-9,个位是0-9,用正则表达式可以表示成:1\d{2}
因此0-99可以和写成:[1-9]?\d,那么0-199就可以合写为:(1\d{2}|[1-9]?\d),那么0-255就可以表示为:(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))
最后,后面3段加上句点.可以使用{3}重复得到,得到IP地址的正则表达式:
^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$
python2.7正则表达式解法:
import re
def judge_ip(ip):
ip_str = '^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$'
compile_ip = re.compile(ip_str)
if compile_ip.match(ip):
return True
else:
return False
python2.7字符串匹配法解法:
def judge_ip2(ip):
if '.' not in ip:
return False
elif ip.count('.') != 3:
return False
else:
Flag = True
ip_list = ip.split('.')
for ipstr in ip_list:
try:
ipnum = int(ipstr)
if ipnum <= 255 and ipnum >= 0:
pass
else:
Flag = False
except:
Flag = False
return Flag
网友评论