今天在微信群里看到有人抛出这么一道题:
string = "192.0.0.1?!289.0.0.1!0.0.0.0!192.163.10.28?192.0.0.1"
#要求返回一个ip数组,并且按照ip最后一位排序返回
第一想法就是,把这串字符串根据正则去除里面的特殊符号,得到一个新的数组,然后将新数组里面的元素切片,根据得到元素最后一个数字进行排列,从而得到结果返回这个数组。
1 import re 2 string = "192.0.0.1?!289.0.0.1!0.0.0.0!192.163.10.28?192.0.0.1" 3 #要求返回一个ip数组,并且按照ip最后一位排序返回 4 str_list = re.split('?!|!|?', string) 5 new_list = sorted(str_list, key=lambda x: x[-1]) 6 print(new_list)
但是仔细想了一下,本不存在289.0.0.1这样的ip,可见这道题纯粹是为了出题而出题。
所以心里想着,可以优化一下代码,对里面的ip格式进行判断。故得到如下代码:
1 import re 2 result = [] 3 string = "192.0.0.1?!289.0.0.1!0.0.0.0!192.163.10.28?192.0.0.1" 4 str_list = re.split(r"?!|?|!", string) 5 for ip in str_list: 6 ip_list = ip.split(".") 7 if len(ip_list) == 4: 8 for i in ip_list: 9 if eval(i) > 255 or eval(i) < 0: 10 break 11 else: 12 result.append(ip) 13 result = sorted(result, key=lambda x: x[-1]) 14 print(result)
从运算结果可以得知,我将不满足ip格式的元素,从这个数组里面去除了。