题目:
根据一个字符串返回一个ip数组,按照ip最后一位排序, 字符串:
str = 'ss192.0.0.12?!289.0.0.1!0.0.0.0!192.163.10.28?192.0.0.5'
用了一个笨方法,先取一个ip,然后去掉 前后的非汉字,再去循环取,代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 str = 'ss192.0.0.12?!289.0.0.1!0.0.0.0!192.163.10.28?192.0.0.5' 2 str1 = '.' 3 4 def getIp(str): 5 ''' 6 返回 字符串中第一个ip以及最后的位置 7 :param str: 8 :return: ip、下一个位置 9 ''' 10 # 获取第一个点的下标 11 num1 = int(str.index(str1)) 12 13 #取三位,少于三位的取全部 14 if num1 >=3: 15 ip1 = str[num1-3:num1] 16 else: 17 ip1 = str[0:num1] 18 19 #判断第一位数字出现的位置,并获取ip第一数字的下标 20 if len(ip1)==3: 21 if ip1[1:2].isdigit(): 22 if ip1[:1].isdigit(): 23 i1 = num1 - 3 24 else: 25 i1 = num1 - 2 26 else: 27 i1 = num1 - 1 28 elif len(ip1)==2: 29 if ip1[:1].isdigit(): 30 i1 = num1 - 2 31 else: 32 i1 = num1 - 1 33 else: 34 i1 = num1-1 35 36 #获取第二、三个点的下标 37 num2 = int(str.index(str1,num1+1)) 38 num3 = int(str.index(str1, num2 + 1)) 39 40 ip4 = str[num3+1:num3+4] 41 # 判断最后一位数字出现的位置,并获取ip第一数字的下标 42 if ip4[1:2].isdigit(): 43 if ip4[2:].isdigit(): 44 i4 = num3+3 45 else: 46 i4 = num3 + 2 47 else: 48 i4 = num3 + 1 49 50 ip = str[i1:i4+1] 51 i = i4+1 52 53 return ip,i 54 55 def getAllIp(str): 56 ''' 57 返回所有ip 58 :param str: 59 :return: 返回 str中出现的ip 60 ''' 61 i = 0 62 ip = [] 63 while str.count(str1)>=3: 64 res = getIp(str) 65 ip.append(res[0]) 66 i = res[1] 67 str = str[i:] 68 69 return ip 70 71 def strLast(str): 72 ''' 73 根据ip最后一个数字排序 74 :param str: 75 :return: 76 ''' 77 return str[-1:] 78 79 l1 = getAllIp(str) 80 l2 = sorted(l1,key=strLast) 81 print l1 82 print l2