J'ai la sortie d'une commande sous forme de tableau. J'analyse cette sortie d'un fichier de résultat et 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 un ou plusieurs espaces et le scinder. 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 division, str2
est ajouté à une liste.
En utilisant (
, )
, vous capturez le groupe. Si vous les supprimez simplement, vous ne rencontrerez pas ce problème.
>>> str1 = "a b c d"
>>> re.split(" +", str1)
['a', 'b', 'c', 'd']
Cependant, il n’ya pas besoin de regex, str.split
sans aucun délimiteur spécifié le séparera par des espaces pour vous. Ce serait le meilleur moyen dans ce cas.
>>> str1.split()
['a', 'b', 'c', 'd']
Si vous voulez vraiment regex vous pouvez utiliser ceci ('\s'
représente les espaces et c'est plus clair):
>>> re.split("\s+", str1)
['a', 'b', 'c', 'd']
ou vous pouvez trouver tous les caractères non-blancs
>>> re.findall(r'\S+',str1)
['a', 'b', 'c', 'd']
La méthode str.split
supprimera automatiquement tout espace blanc entre les éléments:
>>> str1 = "a b c d"
>>> str1.split()
['a', 'b', 'c', 'd']
Les documents sont ici: http://docs.python.org/library/stdtypes.html#str.split
Lorsque vous utilisez re.split
et que le modèle divisé contient des groupes de capture, ceux-ci sont conservés dans la sortie. Si vous ne le souhaitez pas, utilisez plutôt un groupe sans capture.
C'est très simple en fait. Essaye ça:
str1="a b c d"
splitStr1 = str1.split()
print splitStr1