2017-02-28 2 views
2

Wie kann ich ein IP-Netzwerk mit Regex finden?Python Regex Teilzeichenfolge zu Pandas Netzwerk IP

Beispiel

IP 
234.523.213.462:321 
21.236.432.123:66666 
213.406.421.436:7324 

Ich will

IP    Port 
234.523.213.462 321 
21.236.432.123 66666 
213.406.421.436 7324 

Sie brauchen Hilfe! Danke.

+1

Durch die Art und Weise verwendet wird, kann die Portnummer nicht '66666', Portnummer eine Ganzzahl im Bereich 1-65535. – avysk

Antwort

0

Regex ist eine Überkompilierung für diese Aufgabe.

In [1]: "213.406.421.436:7324".split(":") 
Out[1]: ['213.406.421.436', '7324'] 

In [2]: "213.406.421.436:7324".split(":")[0] 
Out[2]: '213.406.421.436' 

In [3]: "213.406.421.436:7324".split(":")[1] 
Out[3]: '7324' 

Sie können sowohl IP und den Port von Ihrem Zeichenfolge wie folgt erhalten:

ip, port = "213.406.421.436:7324".split(":") 
2

Verwenden vectorize Pandas Methode str.split:

df[['IP','Port']] = df.IP.str.split(':', expand=True) 
print (df) 
       IP Port 
0 234.523.213.462 321 
1 21.236.432.123 66666 
2 213.406.421.436 7324 

Lösung mit regex (wenn es nur Zahlen sind, : und .):

df[['IP','Port']] = df.IP.str.extract('(.*):(.*)', expand=True) 
print (df) 
       IP Port 
0 234.523.213.462 321 
1 21.236.432.123 66666 
2 213.406.421.436 7324 
2

pd.Series.str.extract

einfach regex

df.IP.str.extract('(?P<IP>.+):(?P<Port>\d+)', expand=True) 

      IP Port 
0 523.213.462 321 
1 236.432.123 66666 
2 406.421.436 7324 

explizite regex

df.IP.str.extract('(?P<IP>\d{1,3}\.\d{1,3}\.\d{1,3}):(?P<Port>\d+)', expand=True) 

      IP Port 
0 523.213.462 321 
1 236.432.123 66666 
2 406.421.436 7324