133 votes

Comment diviser et analyser une chaîne de caractères en Python ?

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

Je veux diviser cette chaîne de caractères sur l'underscore. _ afin que je puisse utiliser la valeur sur le côté gauche.

0 votes

Lire la suite partition de chaînes de caractères, puis mettez à jour votre question.

163voto

NPE Points 169956

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

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

Cela divise la chaîne de caractères à chaque underscore. Si vous voulez qu'il s'arrête après la première division, utilisez "2.7.0_bf4fda703454".split("_", 1) .

Si vous savez avec certitude que la chaîne de caractères contient un trait de soulignement, vous pouvez même décompresser la LHS et la RHS dans des variables distinctes :

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 est d'utiliser partition() . L'utilisation est similaire au dernier exemple, sauf qu'il renvoie trois composantes 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.

103voto

Eric Leschinski Points 14289

Analyse syntaxique des chaînes de caractères en Python

Séparer une chaîne de caractères sur l'espace, obtenir une liste, montrer son type, l'imprimer :

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 l'un à côté de l'autre, la 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!!!']

Divise une chaîne de caractères sur le soulignement et récupère le 5ème é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 split de Python, la documentation indique : "les séries 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 comporte des espaces blancs en tête ou en queue".

Accrochez-vous à vos chapeaux les gars, parse sur 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 "[a-m]+" signifie les lettres minuscules a par le biais de m qui apparaissent une ou plusieurs fois sont appariés comme un délimiteur. re est une bibliothèque à importer.

Ou si vous voulez mâcher les articles un par un :

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

4 votes

Pour répondre à votre question : Ring-ding-ding-ding-dingeringeding Gering-ding-ding-ding-dingeringeding Gering-ding-ding-ding-dingeringeding . S'il te plaît, ne me déteste pas.

22voto

bgporter Points 11119

S'il s'agit toujours d'une répartition égale LHS/RHS, vous pouvez également utiliser la fonction partition qui est intégrée aux chaînes de caractères. Elle retourne un 3-tuple comme (LHS, separator, RHS) si le séparateur est 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', '', '')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X