Rimuovi tutti gli spazi bianchi in una stringa


788

Voglio eliminare tutto lo spazio bianco da una stringa, su entrambe le estremità e tra le parole.

Ho questo codice Python:

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

Ma questo elimina solo gli spazi bianchi su entrambi i lati della stringa. Come posso rimuovere tutti gli spazi bianchi?


4
Come dovrebbe essere il tuo risultato? hello apple? helloapple?
Mark Byers,

4
@JoachimPileborg, non esattamente penso, perché si tratta anche di ridurre lo spazio bianco tra le parole.
wal-o-mat,

3
ciaoapple deve essere il mio output
co2f2e,

8
Correggimi se sbaglio, ma "spazi bianchi" non è sinonimo di "caratteri spaziali". La risposta corrente contrassegnata come corretta non rimuove tutto lo spazio bianco . Ma, poiché è contrassegnato come corretto, deve aver risposto alla domanda prevista? Quindi dovremmo modificare la domanda per riflettere la risposta accettata? @Kalanamith Volevi rimuovere tutti gli spazi bianchi o solo gli spazi?
AnnanFay,

Risposte:


1659

Se si desidera rimuovere spazi iniziali e finali, utilizzare str.strip():

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

Se si desidera rimuovere tutti i caratteri dello spazio, utilizzare str.replace():

(NB questo rimuove solo il carattere "normale" di spazio ASCII ' ' U+0020ma non qualsiasi altro spazio bianco )

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

Se si desidera rimuovere spazi duplicati, utilizzare str.split():

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

42
La grandezza di questa funzione è che rimuove anche '\ r \ n' dal file html che ho ricevuto da Beautiful Soup.
lsheng

27
Mi piace "" .join (frase.split ()), questo rimuove tutti gli spazi bianchi (spazi, tabulazioni, nuove righe) da qualsiasi punto della frase.
don

mendicante qui. Qualcuno può spiegarmi perché print (reply.join (prono.split ())) risulta in 'ciao ciao appleapple'? Voglio solo capire come viene elaborato il codice qui.
Yannis Dran,

2
@YannisDran controlla la documentazione di str.join () , quando chiami sentence.join(str_list)chiedi a python di unire gli elementi da str_list con sentencecome separatore.
Cédric Julien,

1
"".join(sentence.split())è davvero la soluzione canonica, rimuovendo efficacemente tutti gli spazi bianchi anziché solo gli spazi. L' eccellente risposta di Mark Byers avrebbe probabilmente dovuto essere accettata al posto di questa risposta meno applicabile.
Cecil Curry,

263

Per rimuovere solo gli spazi usare str.replace:

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

Per rimuovere tutti i caratteri di spazi bianchi (spazio, tabulazione, nuova riga e così via) è possibile utilizzare splitquindi join:

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

o un'espressione regolare:

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

Se vuoi rimuovere solo gli spazi dall'inizio e alla fine puoi usare strip:

sentence = sentence.strip()

È inoltre possibile utilizzare lstripper rimuovere gli spazi bianchi solo dall'inizio della stringa e rstripper rimuovere gli spazi bianchi dalla fine della stringa.


Nota: non è necessario compilare step, re.sub (e amici) memorizzare nella cache il modello compilato. Vedi anche, la risposta di Emil .
Andy Hayden,

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

104

Un'alternativa è usare espressioni regolari e abbinare anche questi strani caratteri di spazi bianchi . Ecco alcuni esempi:

Rimuovi TUTTI gli spazi in una stringa, anche tra le parole:

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

Rimuovere gli spazi all'inizio di una stringa:

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

Rimuovere gli spazi nella FINE di una stringa:

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

Rimuovi gli spazi sia in INIZIO che in FINE di una stringa:

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

Rimuovi SOLO DUPLICATE spazi:

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

(Tutti gli esempi funzionano sia in Python 2 che in Python 3)


Non ha funzionato per "\ u202a1234 \ u202c". Fornisce lo stesso output: u '\ u202a1234 \ u202c'
Sarang

@Sarang: quelli non sono caratteri bianchi (google li vedrai) ma "Punteggiatura generale". La mia risposta riguarda solo la rimozione di caratteri classificati come spazi bianchi.
Emil Stenström,

Questa è l'unica soluzione che vedo qui che rimuove quei dannati fastidiosi personaggi degli spazi bianchi unicode, grazie fam
CapnShanty

41

Lo spazio bianco include spazio, tabulazioni e CRLF . Quindi una funzione di stringa elegante e da una riga che possiamo usare è str.translate:

Python 3

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

O se vuoi essere accurato:

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

Python 2

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

O se vuoi essere accurato:

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

2
Questo non aiuta con gli spazi bianchi Unicode come\xc2\xa0
Suzana,

5
ans.translate( None, string.whitespace )produce solo builtins.TypeError: translate() takes exactly one argument (2 given)per me. Docs afferma che l'argomento è una tabella di traduzione, vedi string.maketrans (). Ma vedi il commento di Amnon Harel, sotto.
user405,

2
' hello apple'.translate(str.maketrans('', '', string.whitespace))Nota: è preferibile creare una variabile per memorizzare la tabella trans se si intende farlo più volte.
Shogan Aversa-Druesne,

16

Per rimuovere spazi bianchi dall'inizio e dalla fine, utilizzare strip.

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

1
La domanda in particolare chiede di rimuovere tutto lo spazio bianco e non solo le estremità. Si prega di notare.
Shayan Shafiq

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

MaK ha già sottolineato il metodo "traduci" sopra. E questa variazione funziona con Python 3 (vedi questo Q&A ).


2
Grazie! O, xxx.translate( { ord(c) :None for c in string.whitespace } )per completezza.
user405

7

Stai attento:

strip esegue una rstrip e una lstrip (rimuove spazi iniziali e finali, tabulazioni, ritorni e feed di moduli, ma non li rimuove nel mezzo della stringa).

Se sostituisci solo spazi e schede, puoi finire con CRLF nascosti che sembrano corrispondere a ciò che stai cercando, ma non sono gli stessi.


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

3
la domanda era anche rimuovere tutto lo spazio bianco che include le schede e i caratteri di nuova riga, questo frammento rimuoverà solo gli spazi regolari.
Maximilian Peters,

3

Inoltre, strip presenta alcune varianti:

Rimuovere gli spazi tra INIZIO e FINE di una stringa:

sentence= sentence.strip()

Rimuovere gli spazi all'inizio di una stringa:

sentence = sentence.lstrip()

Rimuovere gli spazi nella FINE di una stringa:

sentence= sentence.rstrip()

Tutte e tre le funzioni di stringa strip lstripe rstrippossono richiedere lo striping dei parametri della stringa, con il valore predefinito è tutto spazio bianco. Questo può essere utile quando lavori con qualcosa di particolare, ad esempio, puoi rimuovere solo spazi ma non newline:

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

Oppure potresti rimuovere le virgole extra durante la lettura in un elenco di stringhe:

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

1

elimina tutto lo spazio bianco da una stringa, su entrambe le estremità e tra le parole.

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

Documenti Python:


So che reè stato suggerito prima, ma ho scoperto che la risposta effettiva al titolo della domanda era un po 'nascosta tra tutte le altre opzioni.
gestire il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.