题目:
根据一个字符串返回一个ip数组,按照ip最后一位排序, 字符串:
str = 'ss192.0.0.12?!289.0.0.1!0.0.0.0!192.163.10.28?192.0.0.5'
用了一个笨方法,先取一个ip,然后去掉 前后的非汉字,再去循环取,代码如下:
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
View Code