¿Cómo puedo dividir y analizar una cadena en Python?

Estoy tratando de dividir esta cadena en python: 2.7.0_bf4fda703454

Quiero dividir esa cadena en el guión bajo _ para poder usar el valor en el lado izquierdo.

"2.7.0_bf4fda703454".split("_") proporciona una lista de cadenas:

 In [1]: "2.7.0_bf4fda703454".split("_") Out[1]: ['2.7.0', 'bf4fda703454'] 

Esto divide la cadena en cada subrayado. Si desea que se detenga después de la primera división, use "2.7.0_bf4fda703454".split("_", 1) .

Si sabe a ciencia cierta que la cadena contiene un guión bajo, incluso puede descomprimir el LHS y el RHS en variables separadas:

 In [8]: lhs, rhs = "2.7.0_bf4fda703454".split("_", 1) In [9]: lhs Out[9]: '2.7.0' In [10]: rhs Out[10]: 'bf4fda703454' 

Una alternativa es usar partition() . El uso es similar al último ejemplo, excepto que devuelve tres componentes en lugar de dos. La principal ventaja es que este método no falla si la cadena no contiene el separador.

Tutorial de la secuencia de Python

Dividir una cadena en el espacio, obtener una lista, mostrar su tipo, imprimirlo:

 el@apollo:~/foo$ python >>> mystring = "What does the fox say?" >>> mylist = mystring.split(" ") >>> print type(mylist)  >>> print mylist ['What', 'does', 'the', 'fox', 'say?'] 

Si tiene dos delimitadores uno junto al otro, se supone una cadena vacía:

 el@apollo:~/foo$ python >>> mystring = "its so fluffy im gonna DIE!!!" >>> print mystring.split(" ") ['its', '', 'so', '', '', 'fluffy', '', '', 'im', 'gonna', '', '', '', 'DIE!!!'] 

Divide una cadena en el guión bajo y toma el quinto elemento de la lista:

 el@apollo:~/foo$ python >>> mystring = "Time_to_fire_up_Kowalski's_Nuclear_reactor." >>> mystring.split("_")[4] "Kowalski's" 

Contraer múltiples espacios en uno

 el@apollo:~/foo$ python >>> mystring = 'collapse these spaces' >>> mycollapsedstring = ' '.join(mystring.split()) >>> print mycollapsedstring.split(' ') ['collapse', 'these', 'spaces'] 

Cuando no se pasa ningún parámetro al método de división de Python, la documentación indica : “las ejecuciones de espacios en blanco consecutivos se consideran como un solo separador, y el resultado no contendrá cadenas vacías al principio o al final si la cadena tiene espacios en blanco iniciales o finales”.

Aférrese a sus sombreros, muchachos, analice en una expresión regular:

 el@apollo:~/foo$ python >>> mystring = 'zzzzzzabczzzzzzdefzzzzzzzzzghizzzzzzzzzzzz' >>> import re >>> mylist = re.split("[am]+", mystring) >>> print mylist ['zzzzzz', 'zzzzzz', 'zzzzzzzzz', 'zzzzzzzzzzzz'] 

La expresión regular “[am] +” significa que las letras minúsculas de la A a la m que aparecen una o más veces se comparan como un delimitador. re es una biblioteca para ser importada.

O si quieres masticar los artículos uno a la vez:

 el@apollo:~/foo$ python >>> mystring = "theres coffee in that nebula" >>> mytuple = mystring.partition(" ") >>> print type(mytuple)  >>> print mytuple ('theres', ' ', 'coffee in that nebula') >>> print mytuple[0] theres >>> print mytuple[2] coffee in that nebula 

Si siempre va a ser una división LHS / RHS uniforme, también puede usar el método de partition que está integrado en cadenas. Devuelve una tupla de 3 como (LHS, separator, RHS) si se encuentra el separador y (original_string, '', '') si el separador no estaba presente:

 >>> "2.7.0_bf4fda703454".partition('_') ('2.7.0', '_', 'bf4fda703454') >>> "shazam".partition("_") ('shazam', '', '')