¿Cómo puedo dividir y analizar una cadena en Python? [duplicar]
Estoy intentando 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("_")
da una lista de cadenas:
In [1]: "2.7.0_bf4fda703454".split("_")
Out[1]: ['2.7.0', 'bf4fda703454']
Esto divide la cadena en cada guión bajo. Si desea que se detenga después de la primera división, utilice "2.7.0_bf4fda703454".split("_", 1)
.
Si sabe con certeza que la cadena contiene un guión bajo, incluso puede descomprimir LHS y 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 utilizar 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 análisis de cadenas de Python
Divida una cadena en el espacio, obtenga una lista, muestre su tipo, imprímala:
el@apollo:~/foo$ python
>>> mystring = "What does the fox say?"
>>> mylist = mystring.split(" ")
>>> print type(mylist)
<type 'list'>
>>> print mylist
['What', 'does', 'the', 'fox', 'say?']
Si tiene dos delimitadores uno al lado del 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!!!']
Divida una cadena en guión bajo y tome 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 varios espacios en uno
el@apollo:~/foo$ python
>>> mystring = 'collapse these spaces'
>>> mycollapsedstring = ' '.join(mystring.split())
>>> print mycollapsedstring.split(' ')
['collapse', 'these', 'spaces']
Cuando no 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 un separador único y el resultado no contendrá cadenas vacías al principio o al final si la cadena tiene espacios en blanco al principio o al final".
Sujétense los sombreros, muchachos, analicen una expresión regular:
el@apollo:~/foo$ python
>>> mystring = 'zzzzzzabczzzzzzdefzzzzzzzzzghizzzzzzzzzzzz'
>>> import re
>>> mylist = re.split("[a-m]+", mystring)
>>> print mylist
['zzzzzz', 'zzzzzz', 'zzzzzzzzz', 'zzzzzzzzzzzz']
La expresión regular "[am]+" significa que las letras minúsculas a
que m
aparecen una o más veces coinciden como delimitador. re
es una biblioteca para importar.
O si quieres masticar los elementos uno a la vez:
el@apollo:~/foo$ python
>>> mystring = "theres coffee in that nebula"
>>> mytuple = mystring.partition(" ")
>>> print type(mytuple)
<type 'tuple'>
>>> 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 uniforme LHS/RHS, también puedes usar el partition
método integrado en las cadenas. Devuelve una tupla de 3 como (LHS, separator, RHS)
si se encontrara el separador y (original_string, '', '')
si el separador no estuviera presente:
>>> "2.7.0_bf4fda703454".partition('_')
('2.7.0', '_', 'bf4fda703454')
>>> "shazam".partition("_")
('shazam', '', '')