Rimuovi spazi / tabulazioni / nuove righe - python


94

Sto cercando di rimuovere tutti gli spazi / tabulazioni / nuove righe in python 2.7 su Linux.

Ho scritto questo, dovrebbe fare il lavoro:

myString="I want to Remove all white \t spaces, new lines \n and tabs \t"
myString = myString.strip(' \n\t')
print myString

produzione:

I want to Remove all white   spaces, new lines 
 and tabs

Sembra una cosa semplice da fare, eppure qui mi manca qualcosa. Dovrei importare qualcosa?


Controlla la risposta a questa domanda correlata: stackoverflow.com/questions/1185524/… strip () rimuove solo i caratteri iniziali e finali, non TUTTI i caratteri.
dckrooney


1
Questo ha funzionato per me, da: [Come tagliare gli spazi bianchi (comprese le tabulazioni)?] [1] s = s.strip ('\ t \ n \ r') [1]: stackoverflow.com/questions/1185524/…
stamat

Risposte:


124

Utilizzare str.split([sep[, maxsplit]])senza sepo sep=None:

Dai documenti :

Se sepnon è specificato o è None, viene applicato un algoritmo di divisione diverso: le sequenze di spazi vuoti consecutivi sono considerate come un singolo separatore e il risultato non conterrà stringhe vuote all'inizio o alla fine se la stringa ha spazi bianchi iniziali o finali.

Demo:

>>> myString.split()
['I', 'want', 'to', 'Remove', 'all', 'white', 'spaces,', 'new', 'lines', 'and', 'tabs']

Utilizzare str.joinnell'elenco restituito per ottenere questo output:

>>> ' '.join(myString.split())
'I want to Remove all white spaces, new lines and tabs'

57

Se desideri rimuovere più elementi di spazi bianchi e sostituirli con spazi singoli, il modo più semplice è con un'espressione regolare come questa:

>>> import re
>>> myString="I want to Remove all white \t spaces, new lines \n and tabs \t"
>>> re.sub('\s+',' ',myString)
'I want to Remove all white spaces, new lines and tabs '

Puoi quindi rimuovere lo spazio finale con .strip()se lo desideri.


13

Usa la libreria re

import re
myString = "I want to Remove all white \t spaces, new lines \n and tabs \t"
myString = re.sub(r"[\n\t\s]*", "", myString)
print myString

Produzione:

Desidero rimuovere tutti gli spazi bianchi, le nuove righe e le schede


1
Questa è una correzione della risposta originale data da @ TheGr8Adakron, non un duplicato
Jesuisme

12
import re

mystr = "I want to Remove all white \t spaces, new lines \n and tabs \t"
print re.sub(r"\W", "", mystr)

Output : IwanttoRemoveallwhitespacesnewlinesandtabs

4
questo rimuove anche ";"
gennaio

10

Questo rimuoverà solo la scheda, le nuove righe, gli spazi e nient'altro.

import re
myString = "I want to Remove all white \t spaces, new lines \n and tabs \t"
output   = re.sub(r"[\n\t\s]*", "", myString)

PRODUZIONE:

IwantoRemoveallwhiespaces, newlineandtabs

Buona giornata!


1
Grazie per la soluzione - Penso che sia necessaria una piccola correzione, dovrebbe essere "+" invece di "*".
Sajad Karim

5

Le soluzioni di cui sopra che suggeriscono l'uso di regex non sono ideali perché questo è un compito così piccolo e regex richiede più risorse in testa di quanto la semplicità dell'attività giustifichi.

Ecco cosa faccio:

myString = myString.replace(' ', '').replace('\t', '').replace('\n', '')

o se avessi un sacco di cose da rimuovere in modo tale che una soluzione a riga singola sarebbe gratuitamente lunga:

removal_list = [' ', '\t', '\n']
for s in removal_list:
  myString = myString.replace(s, '')

2

Dal momento che non c'è nient'altro che fosse più intricato, ho voluto condividere questo dato che mi ha aiutato.

Questo è quello che ho usato originariamente:

import requests
import re

url = '/programming/10711116/strip-spaces-tabs-newlines-python' # noqa
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)
print("{}".format(r.content))

Risultato indesiderato:

b'<!DOCTYPE html>\r\n\r\n\r\n    <html itemscope itemtype="http://schema.org/QAPage" class="html__responsive">\r\n\r\n    <head>\r\n\r\n        <title>string - Strip spaces/tabs/newlines - python - Stack Overflow</title>\r\n        <link

Questo è ciò in cui l'ho cambiato:

import requests
import re

url = '/programming/10711116/strip-spaces-tabs-newlines-python' # noqa
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)
regex = r'\s+'
print("CNT: {}".format(re.sub(regex, " ", r.content.decode('utf-8'))))

Risultato desiderato:

<!DOCTYPE html> <html itemscope itemtype="http://schema.org/QAPage" class="html__responsive"> <head> <title>string - Strip spaces/tabs/newlines - python - Stack Overflow</title>

L'esatta regex menzionata da @MattH era ciò che ha funzionato per me nell'inserirla nel mio codice. Grazie!

Nota: questo è python3

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.