Supprimer tous les espaces dans une chaîne


789

Je veux éliminer tous les espaces blancs d'une chaîne, aux deux extrémités et entre les mots.

J'ai ce code Python:

def my_handle(self):
    sentence = ' hello  apple  '
    sentence.strip()

Mais cela n'élimine que les espaces des deux côtés de la chaîne. Comment supprimer tous les espaces?


4
À quoi devrait ressembler votre résultat? hello apple? helloapple?
Mark Byers

4
@JoachimPileborg, pas exactement je pense, car il s'agit aussi de réduire les espaces entre les mots.
wal-o-mat

3
helloapple doit être ma sortie
co2f2e

8
Corrigez-moi si je me trompe, mais "espaces blancs" n'est pas synonyme de "caractères d'espacement". La réponse actuelle marquée comme correcte ne supprime pas tous les espaces . Mais, comme il est marqué comme correct, il doit avoir répondu à la question voulue? Nous devrions donc modifier la question pour refléter la réponse acceptée? @Kalanamith Souhaitez-vous ou voulez-vous supprimer tous les espaces ou uniquement les espaces?
AnnanFay

Réponses:


1661

Si vous souhaitez supprimer les espaces de début et de fin, utilisez str.strip():

sentence = ' hello  apple'
sentence.strip()
>>> 'hello  apple'

Si vous souhaitez supprimer tous les caractères d'espace, utilisez str.replace():

(NB cela ne supprime que le caractère d'espace ASCII «normal» ' ' U+0020mais pas les autres espaces )

sentence = ' hello  apple'
sentence.replace(" ", "")
>>> 'helloapple'

Si vous souhaitez supprimer les espaces dupliqués, utilisez str.split():

sentence = ' hello  apple'
" ".join(sentence.split())
>>> 'hello apple'

42
La grandeur de cette fonction est qu'elle supprime également le '\ r \ n' du fichier html que j'ai reçu de Beautiful Soup.
lsheng

27
J'aime "" .join (phrase.split ()), cela supprime tous les espaces (espaces, tabulations, sauts de ligne) de n'importe où dans la phrase.
don

mendiant ici. Quelqu'un peut-il m'expliquer pourquoi print (sentence.join (sentence.split ())) se traduit par «bonjour bonjour appleapple»? Je veux juste comprendre comment le code est traité ici.
Yannis Dran

2
@YannisDran consultez la documentation str.join () , lorsque vous appelez, sentence.join(str_list)vous demandez à python de joindre les éléments de str_list avec sentencecomme séparateur.
Cédric Julien

1
"".join(sentence.split())est en effet la solution canonique, supprimant efficacement tous les espaces plutôt que simplement les espaces. L' excellente réponse de Mark Byers aurait probablement dû être acceptée à la place de cette réponse moins applicable.
Cecil Curry

263

Pour supprimer uniquement les espaces, utilisez str.replace:

sentence = sentence.replace(' ', '')

Pour supprimer tous les caractères d' espacement (espace, tabulation, retour à la ligne, etc.), vous pouvez utiliser splitensuite join:

sentence = ''.join(sentence.split())

ou une expression régulière:

import re
pattern = re.compile(r'\s+')
sentence = re.sub(pattern, '', sentence)

Si vous souhaitez supprimer uniquement les espaces blancs du début et de la fin, vous pouvez utiliser strip:

sentence = sentence.strip()

Vous pouvez également utiliser lstrippour supprimer les espaces uniquement au début de la chaîne et rstrippour supprimer les espaces à la fin de la chaîne.


Remarque: Vous n'avez pas besoin de compiler l'étape, re.sub (et vos amis) mettent en cache le modèle compilé. Voir aussi, la réponse d'Emil .
Andy Hayden

python3:yourstr.translate(str.maketrans('', '', ' \n\t\r'))
deed02392

104

Une alternative consiste à utiliser des expressions régulières et à faire correspondre ces étranges espaces blancs également. Voici quelques exemples:

Supprimez TOUS les espaces d'une chaîne, même entre les mots:

import re
sentence = re.sub(r"\s+", "", sentence, flags=re.UNICODE)

Supprimez les espaces au DÉBUT d'une chaîne:

import re
sentence = re.sub(r"^\s+", "", sentence, flags=re.UNICODE)

Supprimez les espaces à la fin d'une chaîne:

import re
sentence = re.sub(r"\s+$", "", sentence, flags=re.UNICODE)

Supprimez les espaces à la fois au début et à la fin d'une chaîne:

import re
sentence = re.sub("^\s+|\s+$", "", sentence, flags=re.UNICODE)

Supprimez UNIQUEMENT les espaces EN DOUBLE:

import re
sentence = " ".join(re.split("\s+", sentence, flags=re.UNICODE))

(Tous les exemples fonctionnent à la fois en Python 2 et Python 3)


N'a pas fonctionné pour "\ u202a1234 \ u202c". Donne la même sortie: u '\ u202a1234 \ u202c'
Sarang

@Sarang: Ce ne sont pas des espaces (google et vous verrez) mais "Ponctuation générale". Ma réponse ne concerne que la suppression des caractères classés comme espaces blancs.
Emil Stenström

C'est la seule solution que je vois ici qui supprime ces satanés caractères blancs unicode embêtants, merci fam
CapnShanty

41

L' espace comprend l' espace, les tabulations et le CRLF . Donc, une fonction de chaîne élégante et à une ligne que nous pouvons utiliser est str.translate:

Python 3

' hello  apple'..translate(str.maketrans('', '', ' \n\t\r'))

OU si vous voulez être minutieux:

import string
' hello  apple'..translate(str.maketrans('', '', string.whitespace))

Python 2

' hello  apple'.translate(None, ' \n\t\r')

OU si vous voulez être minutieux:

import string
' hello  apple'.translate(None, string.whitespace)

2
Cela n'aidera pas avec les espaces blancs Unicode comme\xc2\xa0
Suzana

5
ans.translate( None, string.whitespace )ne produit que builtins.TypeError: translate() takes exactly one argument (2 given)pour moi. Docs dit que cet argument est une table de traduction, voir string.maketrans (). Mais voir le commentaire d'Amnon Harel, ci-dessous.
user405

2
' hello apple'.translate(str.maketrans('', '', string.whitespace))Remarque: il vaut mieux faire une variable pour stocker la trans-table si vous avez l'intention de le faire plusieurs fois.
Shogan Aversa-Druesne

16

Pour supprimer les espaces du début et de la fin, utilisez strip.

>> "  foo bar   ".strip()
"foo bar"

1
La question demande spécifiquement de supprimer tous les espaces blancs et pas seulement aux extrémités. Veuillez en prendre note.
Shayan Shafiq

9
' hello  \n\tapple'.translate({ord(c):None for c in ' \n\t\r'})

MaK a déjà souligné la méthode "translate" ci-dessus. Et cette variation fonctionne avec Python 3 (voir cette Q&R ).


2
Merci! Ou, xxx.translate( { ord(c) :None for c in string.whitespace } )pour plus de minutie.
user405

7

Faites attention:

strip effectue un rstrip et un lstrip (supprime les espaces de début et de fin, les tabulations, les retours et les formulaires, mais il ne les supprime pas au milieu de la chaîne).

Si vous remplacez uniquement les espaces et les tabulations, vous pouvez vous retrouver avec des CRLF cachés qui semblent correspondre à ce que vous recherchez, mais qui ne sont pas les mêmes.


3
import re    
sentence = ' hello  apple'
re.sub(' ','',sentence) #helloworld (remove all spaces)
re.sub('  ',' ',sentence) #hello world (remove double spaces)

3
la question était trop de supprimer tous les espaces blancs qui incluent les tabulations et les nouveaux caractères de ligne, cet extrait ne supprimera que les espaces réguliers.
Maximilian Peters

3

De plus, la bande a quelques variantes:

Supprimez les espaces au début et à la fin d'une chaîne:

sentence= sentence.strip()

Supprimez les espaces au DÉBUT d'une chaîne:

sentence = sentence.lstrip()

Supprimez les espaces à la fin d'une chaîne:

sentence= sentence.rstrip()

Les trois fonctions de chaîne strip lstripet rstrippeuvent prendre les paramètres de la chaîne à supprimer, la valeur par défaut étant tout l'espace blanc. Cela peut être utile lorsque vous travaillez avec quelque chose de particulier, par exemple, vous pouvez supprimer uniquement les espaces mais pas les retours à la ligne:

" 1. Step 1\n".strip(" ")

Ou vous pouvez supprimer des virgules supplémentaires lors de la lecture dans une liste de chaînes:

"1,2,3,".strip(",")

1

éliminer tous les espaces d'une chaîne, aux deux extrémités et entre les mots.

>>> import re
>>> re.sub("\s+", # one or more repetition of whitespace
    '', # replace with empty string (->remove)
    ''' hello
...    apple
... ''')
'helloapple'

Documents Python:


Je sais que cela rea déjà été suggéré, mais j'ai trouvé que la réponse réelle au titre de la question était un peu cachée parmi toutes les autres options.
gérer
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.