Remova todo o espaço em branco em uma sequência


788

Eu quero eliminar todo o espaço em branco de uma string, nas duas extremidades e entre as palavras.

Eu tenho esse código Python:

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

Mas isso apenas elimina o espaço em branco nos dois lados da string. Como removo todo o espaço em branco?


4
Como deve ser o seu resultado? hello apple? helloapple?
— Mark Byers

4
@JoachimPileborg, não exatamente, eu acho, porque também se trata de um espaço em branco reduzido entre as palavras.
— wal-o-mat

3
helloapple precisa ser a minha saída
— co2f2e

8
Corrija-me se estiver errado, mas "espaço em branco" não é sinônimo de "caracteres de espaço". A resposta atual marcada como correta não remove todos os espaços em branco . Mas, como está marcado como correto, deve ter respondido à pergunta pretendida? Então, devemos editar a pergunta para refletir a resposta aceita? @Kalanamith Deseja, ou deseja remover todos os espaços em branco ou apenas espaços?
— AnnanFay

Respostas:


1659

Se você deseja remover os espaços iniciais e finais, use str.strip():

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

Se você deseja remover todos os caracteres de espaço, use str.replace():

(Nota: isso remove apenas o caractere de espaço ASCII "normal", ' ' U+0020mas não qualquer outro espaço em branco )

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

Se você deseja remover espaços duplicados, use str.split():

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

42
A grandeza dessa função é que ela também remove o '\ r \ n' do arquivo html que recebi da Beautiful Soup.
— Lsheng 26/05

27
Eu gosto de "" .join (frase.split ()), isso remove todos os espaços em branco (espaços, tabulações, novas linhas) de qualquer lugar da frase.
— don

iniciante aqui. Alguém pode me explicar por que print (sentença.join (sentença.split ())) resulta como 'olá, olá, appleapple'? Só quero entender como o código é processado aqui.
— Yannis Dran

2
@YannisDran verifique a documentação str.join () , quando você chama sentence.join(str_list)o python para juntar itens do str_list com sentencecomo separador.
— Cédric Julien

1
"".join(sentence.split())é de fato a solução canônica, removendo com eficiência todo o espaço em branco, e não apenas os espaços. Mark ByersA excelente resposta de provavelmente deveria ter sido aceita em vez dessa resposta menos aplicável.
— Cecil Curry

263

Para remover apenas espaços, use str.replace:

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

Para remover todos os caracteres em branco (espaço, tabulação, nova linha, e assim por diante) você pode usar splitem seguida join:

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

ou uma expressão regular:

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

Se você deseja remover apenas os espaços em branco do começo e do fim, use strip:

sentence = sentence.strip()

Você também pode usar lstrippara remover o espaço em branco somente do início da string e rstrippara remover o espaço em branco do final da string.


Nota: Você não precisa compilar a etapa, re.sub (e amigos) armazena em cache o padrão compilado. Veja também, a resposta de Emil .
— Andy Hayden

python3:yourstr.translate(str.maketrans('', '', ' \n\t\r'))
— deed02392 17/04/19

104

Uma alternativa é usar expressões regulares e combinar esses caracteres estranhos em espaço em branco . aqui estão alguns exemplos:

Remova TODOS os espaços de uma string, mesmo entre as palavras:

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

Remova os espaços no início de uma sequência:

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

Remova os espaços no FIM de uma sequência:

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

Remova os espaços no BEGINNING e no END de uma string:

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

Remova os espaços ONLY DUPLICATE:

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

(Todos os exemplos funcionam em Python 2 e Python 3)


Não funcionou para "\ u202a1234 \ u202c". Dá a mesma saída: u '\ u202a1234 \ u202c'
— Sarang

@ Sarang: Esses não são caracteres de espaço em branco (pesquise neles e você verá), mas "Pontuação geral". Minha resposta trata apenas da remoção de caracteres classificados como espaço em branco.
— Emil Stenström

Esta é a única solução que vejo aqui que remove os maldito traquina unicode caracteres em branco, graças fam
— CapnShanty

41

O espaço em branco inclui espaço, guias e CRLF . Portanto, uma função de string elegante e de uma linha que podemos usar éstr.translate :

Python 3

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

OU se você quiser ser completo:

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

Python 2

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

OU se você quiser ser completo:

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

2
Isto não ajuda com Unicode espaços em branco como\xc2\xa0
— Suzana

5
ans.translate( None, string.whitespace )produz apenas builtins.TypeError: translate() takes exactly one argument (2 given)para mim. O Docs diz que o argumento é uma tabela de conversão, consulte string.maketrans (). Mas veja o comentário de Amnon Harel, abaixo.
— user405

2
' hello apple'.translate(str.maketrans('', '', string.whitespace))Nota: é melhor criar uma variável para armazenar a tabela, se você pretende fazer isso várias vezes.
— Shogan Aversa-Druesne

16

Para remover os espaços em branco do começo e do fim, use strip.

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

1
A pergunta pede especificamente a remoção de todo o espaço em branco e não apenas nas extremidades. Por favor, tome nota.
— Shayan Shafiq 04/03

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

MaK já apontou o método "translate" acima. E essa variação funciona com o Python 3 (consulte as perguntas e respostas ).


2
Obrigado! Ou, xxx.translate( { ord(c) :None for c in string.whitespace } )para mais detalhes.
— user405

7

Seja cuidadoso:

strip faz um rstrip e lstrip (remove espaços iniciais e finais, tabulações, retornos e feeds de formulário, mas não os remove no meio da sequência).

Se você substituir apenas espaços e guias, poderá acabar com CRLFs ocultos que parecem corresponder ao que você está procurando, mas não são os mesmos.


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

3
Se a pergunta também foi remover todos os espaços em branco, que incluem tabulações e novos caracteres de linha, esse trecho removerá apenas espaços regulares.
— Maximilian Peters

3

Além disso, a tira tem algumas variações:

Remova espaços no BEGINNING e END de uma string:

sentence= sentence.strip()

Remova os espaços no início de uma sequência:

sentence = sentence.lstrip()

Remova os espaços no FIM de uma sequência:

sentence= sentence.rstrip()

Todas as três funções de sequência strip lstripe rstrippodem levar os parâmetros da sequência a serem removidos, com o padrão sendo todo o espaço em branco. Isso pode ser útil quando você estiver trabalhando com algo específico, por exemplo, você pode remover apenas espaços, mas não novas linhas:

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

Ou você pode remover vírgulas extras ao ler em uma lista de cadeias:

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

1

elimine todo o espaço em branco de uma string, nas duas extremidades e entre as palavras.

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

Documentos do Python:


Sei que rejá foi sugerido antes, mas descobri que a resposta real ao título da pergunta estava um pouco escondida entre todas as outras opções.
— manipula
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.