1054 votes

Python supprime tous les espaces dans une chaîne de caractères

Duplicata possible :
Comment couper les espaces blancs (y compris les tabulations) ?

Je veux éliminer tous les espaces d'une chaîne de caractères, 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 blancs des deux côtés de la chaîne. Comment supprimer tous les espaces ?

13 votes

À quoi doit ressembler votre résultat ? hello apple ? helloapple ?

4 votes

@JoachimPileborg, pas exactement je pense, car il s'agit aussi de réduire les espaces blancs entre les mots.

6 votes

Helloapple doit être ma sortie

2083voto

Cédric Julien Points 24177

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

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

Si vous voulez supprimer tous les espaces, vous pouvez utiliser str.replace() :

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

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

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

61 votes

L'intérêt de cette fonction est qu'elle supprime également le ' \r\n ' du fichier html que j'ai reçu de Beautiful Soup.

52 votes

J'aime bien "".join(sentence.split()), cela supprime tous les espaces (espaces, tabulations, nouvelles lignes) de n'importe où dans la phrase.

1 votes

Débutant ici. Quelqu'un peut-il m'expliquer pourquoi print(phrase.join(phrase.split())) donne comme résultat 'hello hello appleapple' ? Je veux juste comprendre comment le code est traité ici.

370voto

Mark Byers Points 318575

Pour supprimer uniquement des espaces utiliser str.replace :

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

Pour supprimer tous les caractères d'espacement (espace, tabulation, nouvelle ligne, etc.) vous pouvez utiliser split puis 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 voulez seulement enlever les espaces blancs du début et de la fin, vous pouvez utiliser strip :

sentence = sentence.strip()

Vous pouvez également utiliser lstrip pour supprimer les espaces uniquement au début de la chaîne, et rstrip pour supprimer les espaces à la fin de la chaîne.

0 votes

Note : Vous n'avez pas besoin de compiler step, re.sub (et ses amis) cache le motif compilé. Voir aussi, La réponse d'Emil .

1 votes

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

136voto

Emil Stenström Points 3551

Une alternative est d'utiliser des expressions régulières et de faire correspondre ces étranges caractères d'espace blanc aussi. Voici quelques exemples :

Supprimer TOUS les espaces dans une chaîne, même entre les mots :

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

Supprime les espaces au DÉBUT d'une chaîne de caractères :

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

Supprime les espaces à la FIN d'une chaîne de caractères :

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

Supprime les espaces au DÉBUT et à la FIN d'une chaîne de caractères :

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

Supprimez UNIQUEMENT les espaces DUPLICATA :

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

(Tous les exemples fonctionnent aussi bien avec Python 2 qu'avec Python 3).

0 votes

N'a pas fonctionné pour " \u202a1234\u202c ". Donne le même résultat : u' \u202a1234\u202c '

1 votes

@Sarang : Ce ne sont pas des caractères d'espacement (googlez-les et vous verrez) mais de la "Ponctuation générale". Ma réponse ne concerne que la suppression des caractères classés comme espaces blancs.

0 votes

C'est la seule solution que je vois ici qui supprime ces satanés caractères d'espacement unicode, merci fam.

58voto

MaK Points 1358

"Espace blanc" comprend espace, tabulation et CRLF . Ainsi, un élégant et Une seule phrase La fonction de chaîne de caractères 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 votes

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

5 votes

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

2 votes

' hello apple'.translate(str.maketrans('', '', string.whitespace)) Note : il est préférable de créer une variable pour stocker le tableau trans si vous avez l'intention de le faire plusieurs fois.

16voto

wal-o-mat Points 1413

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

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

2 votes

La question demande spécifiquement de supprimer tous les espaces blancs et pas seulement les extrémités. Veuillez en tenir compte.

0 votes

Cette réponse n'est pas pertinente pour cette question

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