Réponses:
"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.
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 à a
travers m
qui se produisent une ou plusieurs fois sont mis en correspondance comme séparateur. re
est 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
S'il s'agit toujours d'une division LHS / RHS uniforme, vous pouvez également utiliser la partition
mé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', '', '')
partition
méthode des chaînes, puis mettez à jour votre question.