391 votes

Substituez plusieurs espaces avec un seul espace en Python

J'ai cette ficelle:

 mystring = 'Here is  some   text   I      wrote   '
 

Comment puis-je substituer les doubles, triples (...) espaces blancs à un seul espace blanc pour obtenir:

 mystring = 'Here is some text I wrote'
 

Merci.

826voto

Alex Martelli Points 330805

Une possibilité simple (si vous préférez éviter les ER) est

 ' '.join(mystring.split())
 

La scission et la jointure exécutent la tâche que vous demandez explicitement. De plus, elles effectuent la tâche supplémentaire dont vous ne parlez pas mais que vous voyez dans votre exemple, en supprimant les espaces de fin ;-).

169voto

hroest Points 158
 import re

re.sub( '\s+', ' ', mystring ).strip()
 

cela substituera également tous les onglets, nouvelles lignes et autres caractères "similaires à des espaces".

la bande () à la fin supprimera les espaces, comme vous l'avez demandé.

41voto

David C Points 916

Pour être complet, vous pouvez également utiliser:

mystring.strip()  # the while loop will leave a trailing space, 
                  # so the trailing whitespace must be dealt with
                  # before or after the while loop
while '  ' in mystring:
    mystring = mystring.replace('  ', ' ')

qui va travailler rapidement sur des chaînes de caractères avec relativement peu d'espaces (plus rapide que re dans ces situations).

Quel que soit le scénario, Alex Martelli de split/join solution effectue au moins aussi rapidement (généralement de beaucoup plus).

Dans votre exemple, en utilisant les valeurs par défaut de timeit.Minuterie.répéter(), j'ai le temps:

str.replace: [1.4317800167340238, 1.4174888149192384, 1.4163512401715934]
re.sub:      [3.741931446594549,  3.8389395858970374, 3.973777672860706]
split/join:  [0.6530919432498195, 0.6252146571700905, 0.6346594329726258]


EDIT:

Viens de tomber sur ce post qui donne une assez longue comparaison des vitesses de ces méthodes.

-15voto

user2952228 Points 9
 string.replace("  ","")
 

Tous les espaces pairs sont éliminés

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