2012-05-31 8 views
7

Quiero extraer los últimos dos valores de campo de una variable de longitud variable. Por ejemplo, tenga en cuenta los tres valores siguientes:extraer los dos últimos campos de la división

fe80::e590:1001:7d11:1c7e 

ff02::1:ff1f:fb6 

fe80::7cbe:e61:f5ab:e62 ff02::1:ff1f:fb6 

Estas tres líneas son de longitudes variables. Quiero extraer sólo los dos últimos valores de campo si dividimos cada línea de delimitador:

es decir, de las tres líneas, quiero:

7d11, 1c7e 

ff1f, fb6 

ff1f, fb6 

se puede hacer esto utilizando split()? No estoy obteniendo ninguna idea.

Respuesta

16

Si s es la cadena que contiene la dirección IPv6, utilice

s.split(":")[-2:] 

para obtener los dos últimos componentes. El método split() devolverá una lista de todos los componentes, y [-2:] dividirá esta lista para devolver solo los dos últimos elementos.

+0

cómo puedo obtener los valores separados por:, que es para la primera línea, ¿cómo puedo obtener los valores como 7d11: 1c7e – learner

+0

parece que algunos de los delimitadores son dobles '':' ', sería mejor reemplace todos los dos puntos al espacio y use 'split()' – xvatar

+2

@ user1411416 puede usar '':'. join()' – xvatar

15

Se puede utilizar para dividir str.rsplit() desde la derecha:

>>> ipaddress = 'fe80::e590:1001:7d11:1c7e' 
>>> ipaddress.rsplit(':', 2) # splits at most 2 times from the right 
['fe80::e590:1001', '7d11', '1c7e'] 

Esto evita la separación innecesaria de la primera parte de la dirección.

+1

Cierto, pero de acuerdo con mis pruebas, es solo un 6% más rápido. –

+2

@JoelCornett Creo que siempre es una buena práctica eliminar cálculos innecesarios sin importar cuán insignificante sea. – Matt

Cuestiones relacionadas