J'ai la sortie d'une commande sous forme de tableau. J'analyse cette sortie d'un fichier de résultats et je la stocke dans une chaîne. Chaque élément d'une ligne est séparé par un ou plusieurs caractères d'espacement, j'utilise donc des expressions régulières pour faire correspondre 1 ou plusieurs espaces et les diviser. Cependant, un espace est inséré entre chaque élément:
>>> str1="a b c d" # spaces are irregular
>>> str1
'a b c d'
>>> str2=re.split("( )+", str1)
>>> str2
['a', ' ', 'b', ' ', 'c', ' ', 'd'] # 1 space element between!!!
Y a-t-il une meilleure manière de faire cela?
Après chaque fractionnement str2
est ajouté à une liste.
'str2'
str1.split()
. Pas besoin de regex.Réponses:
En utilisant
(
,)
vous capturez le groupe, si vous les supprimez simplement, vous n'aurez pas ce problème.Cependant, il n'y a pas besoin de regex,
str.split
sans aucun délimiteur spécifié, cela divisera cela par un espace pour vous. Ce serait la meilleure façon dans ce cas.Si vous vouliez vraiment regex, vous pouvez utiliser ceci (
'\s'
représente un espace et c'est plus clair):ou vous pouvez trouver tous les caractères non blancs
la source
str.split
est certainement le meilleur: D['', 'a', 'b', 'c', 'de', '']
str1.split()
string.split()
est une option. Je demandais si cela pouvait être fait avec regex aussi?re.findall
option?La
str.split
méthode supprimera automatiquement tout espace blanc entre les éléments:Les documents sont ici: http://docs.python.org/library/stdtypes.html#str.split
la source
str.split()
est probablement le meilleur choix pour quelque chose d'aussi léger que celui-ci.Lorsque vous utilisez
re.split
et que le modèle de division contient des groupes de capture, les groupes sont conservés dans la sortie. Si vous ne le souhaitez pas, utilisez plutôt un groupe non capturant.la source
str.split
est probablement meilleure pour votre exemple. Je voulais juste expliquer pourquoi tu as le comportement que tu as.C'est très simple en fait. Essaye ça:
la source
stringToSplit.split()