Jeśli mam listę ['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'], co będzie najbardziej pytającym, aby wyodrębnić 192.168.0.1 i 192.168.0.11

3
bridgewater 30 listopad 2013, 01:26

2 odpowiedzi

Najlepsza odpowiedź

Spróbuj za pomocą wyrażeń regularnych, gdzie {x0}} jest lista z danymi:

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']

Powyższe zakłada, że w liście jest ważny adres IPv4 IPv4, a po IP nie ma charakteru /.

4
Óscar López 29 listopad 2013, 21:42

«Większość Pythonic» może być dyskusyjna, ale coś wzdłuż tych linii będzie działać:

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']
3
Fred Osterrath 29 listopad 2013, 21:33