首页 > 解决方案 > 以不同格式对 IP 地址进行排序

问题描述

我试图得到:

['192.168.70.19 (tcp/1433)']
['192.168.70.223 (tcp/1051),192.168.70.19 (tcp/1025), 192.168.70.245 (tcp/1051)'] 
['192.168.70.19 (tcp/3389),192.168.70.223 (tcp/3389)']

['192.168.70.19 (tcp/1433)']
['192.168.70.19 (tcp/1025),192.168.70.223 (tcp/1051), 192.168.70.245 (tcp/1051)'] 
['192.168.70.19 (tcp/3389),192.168.70.223 (tcp/3389)']

这是我的代码,它不正确。由于想要保留 tcp 部分,我无法对 IP 地址进行排序。有没有人对此有更好的建议或解决方案。任何想法,将不胜感激。

import re
a=['192.168.70.19 (tcp/1433)', '192.168.70.223 (tcp/1051),192.168.70.19 (tcp/1025),192.168.70.245 (tcp/1025)', '192.168.70.19 (tcp/3389),192.168.70.223 (tcp/3389)']


for z in a:
    if z.find(','):
        #removes tcp part (but I want to keep)        
        #b = re.sub(r'\(.*?\)', '', z)

        #I can sort the IP with this, but it doesnt have the tcp part.
        #z.sort(key=lambda s: map(int, s.split('(')[0].split('.')))

标签: pythonsorting

解决方案


这是一个没有正则表达式的解决方案

[','.join(sorted(x.split(','), key= lambda x: x.split()[0])) for x in a]

要对 IP+TCP 组合进行排序,请使用该元组的第一部分对 ip addr 进行排序

输出:

['192.168.70.19 (tcp/1433)', 
'192.168.70.19 (tcp/1025),192.168.70.223 (tcp/1051),192.168.70.245 (tcp/1025)', 
'192.168.70.19 (tcp/3389),192.168.70.223 (tcp/3389)']

推荐阅读