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.
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.
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 ;-).
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.
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.