如果我有一个列表['default via 192.168.0.1 dev wlan0 proto static \n', '192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.11 \n']
什么是提取192.168.0.1
和192.168.0.11
的最pythonic方式
答案 0 :(得分:4)
使用正则表达式尝试此操作,其中lst
是包含数据的列表:
import re
pat = re.compile(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}[^/]')
[pat.search(s).group(0) for s in lst]
=> ['192.168.0.1', '192.168.0.11']
以上假设列表中的每个字符串都有一个有效的IPv4 IP,并且在IP之后没有/
个字符。
答案 1 :(得分:3)
«大多数pythonic»可能有争议,但沿着这些方向的东西将起作用:
fct = lambda e : [w for w in e.split() if '.' in w and '/' not in w][0]
map( fct, l )
> ['192.168.0.1', '192.168.0.11']