J'essaie de scinder cette chaîne en python: 2.7.0_bf4fda703454
Je veux diviser cette chaîne sur le trait de soulignement _
afin de pouvoir utiliser la valeur sur le côté gauche.
"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 partage, 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 en 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 consiste à utiliser partition()
. L'utilisation est similaire au dernier exemple, à la différence qu'il renvoie trois composants au lieu de deux. L'avantage principal est que cette méthode n'échoue pas si la chaîne ne contient pas le séparateur.
Fractionner une chaîne dans l'espace, obtenir une liste, afficher 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, 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!!!']
Fractionnez une chaîne sur le trait de soulignement et prenez le cinquiè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
el@apollo:~/foo$ python
>>> mystring = 'collapse these spaces'
>>> mycollapsedstring = ' '.join(mystring.split())
>>> print mycollapsedstring.split(' ')
['collapse', 'these', 'spaces']
Lorsque vous ne transmettez aucun paramètre à la méthode split de Python, la documentation indique : "les séquences de blancs consécutifs sont considérées comme un séparateur unique et le résultat ne contiendra aucune chaîne vide au début ou à la fin si la chaîne a espaces de début ou de fin ".
Tenez votre chapeau, 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 "[a-m] +" signifie les lettres minuscules a
à m
qui se produisent une ou plusieurs fois sont associées en tant que délimiteur. re
est une bibliothèque à importer.
Ou si vous souhaitez modifier les éléments un à 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
S'il doit toujours s'agir d'une division même LHS/RHS, vous pouvez également utiliser la méthode partition
intégrée aux chaînes. Il retourne un 3-Tuple sous la forme (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', '', '')