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


107

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.


Lea sobre el partitionmétodo de cadenas y luego actualice su pregunta.
S.Lott

Respuestas:


141

"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, use"2.7.0_bf4fda703454".split("_", 1) .

Si sabe a ciencia cierta que la cadena contiene un guión bajo, puede incluso 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.


80

Tutorial de análisis de cadenas de Python

Divida una cadena en el espacio, obtenga una lista, muestre su tipo, imprímalo:

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 asume 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 el 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 dice : "las ejecuciones de espacios en blanco consecutivos se consideran un solo separador, 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".

Sostén tus sombreros, chicos, analiza 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 ahasta mque aparecen una o más veces se hacen coincidir como delimitadores. rees una biblioteca para ser importada.

O si desea masticar los artículos 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

18

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

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

>>> "shazam".partition("_")
('shazam', '', '')
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.