Come posso dividere e analizzare una stringa in Python?


107

Sto cercando di dividere questa stringa in Python: 2.7.0_bf4fda703454

Voglio dividere quella stringa sul trattino basso in _modo da poter utilizzare il valore sul lato sinistro.


Leggi il partitionmetodo delle stringhe, quindi aggiorna la tua domanda.
S.Lott

Risposte:


141

"2.7.0_bf4fda703454".split("_") fornisce un elenco di stringhe:

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

Questo divide la stringa ad ogni trattino basso. Se vuoi che si fermi dopo la prima divisione, usa "2.7.0_bf4fda703454".split("_", 1).

Se sai per certo che la stringa contiene un trattino basso, puoi persino decomprimere LHS e RHS in variabili separate:

In [8]: lhs, rhs = "2.7.0_bf4fda703454".split("_", 1)

In [9]: lhs
Out[9]: '2.7.0'

In [10]: rhs
Out[10]: 'bf4fda703454'

Un'alternativa è usare partition(). L'utilizzo è simile all'ultimo esempio, tranne per il fatto che restituisce tre componenti invece di due. Il vantaggio principale è che questo metodo non fallisce se la stringa non contiene il separatore.


80

Procedura dettagliata per l'analisi di stringhe Python

Dividi una stringa nello spazio, ottieni un elenco, mostra il suo tipo, stampalo:

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 hai due delimitatori uno accanto all'altro, si presuppone una stringa vuota:

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

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

Dividi una stringa sul carattere di sottolineatura e prendi il 5 ° elemento nell'elenco:

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

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

Comprimi più spazi in uno

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

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

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

Quando non si passa alcun parametro al metodo split di Python, la documentazione afferma : "le sequenze di spazi vuoti consecutivi sono considerate come un singolo separatore e il risultato non conterrà stringhe vuote all'inizio o alla fine se la stringa ha spazi bianchi iniziali o finali".

Tieni i tuoi cappelli ragazzi, analizza un'espressione regolare:

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

L'espressione regolare "[am] +" mezzi le lettere minuscole aattraverso mche si verificano una o più volte sono abbinate come delimitatore. reè una libreria da importare.

O se vuoi masticare gli oggetti uno alla volta:

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

Se sarà sempre una divisione LHS / RHS uniforme, puoi anche utilizzare il partitionmetodo integrato nelle stringhe. Restituisce una 3-tupla come (LHS, separator, RHS)se il separatore fosse trovato e (original_string, '', '')se il separatore non fosse presente:

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

>>> "shazam".partition("_")
('shazam', '', '')
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.