Comment puis-je diviser et analyser une chaîne en Python?

107

J'essaye de diviser cette chaîne en python: 2.7.0_bf4fda703454

Je veux diviser cette chaîne sur le trait de soulignement _afin que je puisse utiliser la valeur sur le côté gauche.

Kamal
la source
Renseignez-vous sur la partitionméthode des chaînes, puis mettez à jour votre question.
S.Lott

Réponses:

141

"2.7.0_bf4fda703454".split("_") donne une liste de chaînes:

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

Cela divise la chaîne à chaque trait de soulignement. Si vous souhaitez qu'il s'arrête après le premier fractionnement, utilisez "2.7.0_bf4fda703454".split("_", 1).

Si vous savez pertinemment que la chaîne contient un trait de soulignement, vous pouvez même décompresser le LHS et le RHS dans des variables séparées:

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

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

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

Une alternative consiste à utiliser partition(). L'utilisation est similaire au dernier exemple, sauf qu'il renvoie trois composants au lieu de deux. Le principal avantage est que cette méthode n'échoue pas si la chaîne ne contient pas le séparateur.

NPE
la source
80

Procédure pas à pas pour l'analyse des chaînes Python

Divisez une chaîne sur l'espace, obtenez une liste, affichez son type, imprimez-la:

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 vous avez deux délimiteurs côte à côte, une chaîne vide est supposée:

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

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

Divisez une chaîne sur le trait de soulignement et récupérez le 5e élément de la liste:

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

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

Réduire plusieurs espaces en un seul

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

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

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

Lorsque vous ne passez aucun paramètre à la méthode de fractionnement de Python, la documentation déclare : "les exécutions d'espaces blancs consécutifs sont considérées comme un seul séparateur, et le résultat ne contiendra aucune chaîne vide au début ou à la fin si la chaîne a des espaces blancs au début ou à la fin".

Tenez vos chapeaux garçons, analysez une expression régulière:

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

L'expression régulière « [am] + » signifie les lettres minuscules à atravers mqui se produisent une ou plusieurs fois sont mis en correspondance comme séparateur. reest une bibliothèque à importer.

Ou si vous voulez grignoter les éléments un à la fois:

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
la source
18

S'il s'agit toujours d'une division LHS / RHS uniforme, vous pouvez également utiliser la partitionméthode intégrée aux chaînes. Il renvoie un 3-tuple comme (LHS, separator, RHS)si le séparateur était trouvé, et (original_string, '', '')si le séparateur n'était pas présent:

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

>>> "shazam".partition("_")
('shazam', '', '')
bgporter
la source