Como posso dividir e analisar uma string em Python?

107

Estou tentando dividir esta string em python: 2.7.0_bf4fda703454

Quero dividir essa string no sublinhado _para poder usar o valor no lado esquerdo.

kamal
fonte
Leia sobre o partitionmétodo de strings e, em seguida, atualize sua pergunta.
S.Lott

Respostas:

141

"2.7.0_bf4fda703454".split("_") fornece uma lista de strings:

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

Isso divide a string a cada sublinhado. Se você quiser que ele pare após a primeira divisão, use "2.7.0_bf4fda703454".split("_", 1).

Se você sabe com certeza que a string contém um sublinhado, você pode até mesmo descompactar o LHS e RHS em variáveis ​​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'

Uma alternativa é usar partition(). O uso é semelhante ao último exemplo, exceto que ele retorna três componentes em vez de dois. A principal vantagem é que esse método não falha se a string não contém o separador.

NPE
fonte
80

Passo a passo de análise de string Python

Divida uma string no espaço, obtenha uma lista, mostre seu tipo, imprima-a:

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?']

Se você tiver dois delimitadores próximos um do outro, uma string vazia será assumida:

el@apollo:~/foo$ python
>>> mystring = "its  so   fluffy   im gonna    DIE!!!"

>>> print mystring.split(" ")
['its', '', 'so', '', '', 'fluffy', '', '', 'im', 'gonna', '', '', '', 'DIE!!!']

Divida uma string no sublinhado e pegue o quinto item da lista:

el@apollo:~/foo$ python
>>> mystring = "Time_to_fire_up_Kowalski's_Nuclear_reactor."

>>> mystring.split("_")[4]
"Kowalski's"

Recolher vários espaços em um

el@apollo:~/foo$ python
>>> mystring = 'collapse    these       spaces'

>>> mycollapsedstring = ' '.join(mystring.split())

>>> print mycollapsedstring.split(' ')
['collapse', 'these', 'spaces']

Quando você não passa nenhum parâmetro para o método de divisão do Python, a documentação afirma : "execuções de espaços em branco consecutivos são consideradas como um único separador e o resultado não conterá strings vazias no início ou no final se a string tiver espaços em branco à esquerda ou à direita".

Segure seus chapéus, rapazes, analise uma expressão regular:

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

A expressão regular "[am] +" significa as letras minúsculas aatravés de mque ocorrer uma ou mais vezes são combinados como um delimitador. reé uma biblioteca a ser importada.

Ou se você quiser mastigar os itens um de cada 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
Eric Leschinski
fonte
18

Se sempre vai ser uma divisão LHS / RHS uniforme, você também pode usar o partitionmétodo que está embutido nas strings. Ele retorna uma tupla de 3 como (LHS, separator, RHS)se o separador fosse encontrado, e (original_string, '', '')se o separador não estivesse presente:

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

>>> "shazam".partition("_")
('shazam', '', '')
bgporter
fonte