Leerzeichen / Tabulatoren / Zeilenumbrüche entfernen - Python

93

Ich versuche, alle Leerzeichen / Tabulatoren / Zeilenumbrüche in Python 2.7 unter Linux zu entfernen.

Ich habe das geschrieben, das sollte den Job machen:

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

Ausgabe:

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

Es scheint eine einfache Sache zu sein, aber mir fehlt hier etwas. Soll ich etwas importieren?

bachurim09
quelle
Überprüfen Sie die Antwort auf diese verwandte Frage: stackoverflow.com/questions/1185524/… strip () entfernt nur führende und nachfolgende Zeichen, nicht ALLE Zeichen.
Dckrooney
1
könnte nützlich sein: stackoverflow.com/questions/8928557/…
newtover
1
Dies funktionierte für mich aus: [Wie schneide ich Leerzeichen (einschließlich Tabulatoren)?] [1] s = s.strip ('\ t \ n \ r') [1]: stackoverflow.com/questions/1185524/…
Stamat

Antworten:

124

Verwenden Sie str.split([sep[, maxsplit]])ohne sepoder sep=None:

Aus Dokumenten :

Wenn dies sepnicht angegeben ist oder ist None, wird ein anderer Aufteilungsalgorithmus angewendet: Läufe aufeinanderfolgender Leerzeichen werden als einzelnes Trennzeichen betrachtet, und das Ergebnis enthält am Anfang oder Ende keine leeren Zeichenfolgen, wenn die Zeichenfolge führende oder nachfolgende Leerzeichen enthält.

Demo:

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

Verwenden Sie str.joinin der zurückgegebenen Liste, um diese Ausgabe zu erhalten:

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

Wenn Sie mehrere Leerzeichen entfernen und durch einzelne Leerzeichen ersetzen möchten, ist der einfachste Weg ein regulärer Ausdruck wie folgt:

>>> 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 '

Sie können dann den nachgestellten Leerzeichen mit entfernen, .strip()wenn Sie möchten.

MattH
quelle
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
Manish Mulani
quelle
4
dies entfernt auch ';'
Januar
12

Verwenden Sie die Wieder Bibliothek

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

Ausgabe:

Ich möchte weiße Leerzeichen, Zeilenumbrüche und Tabs entfernen

Shivam K. Thakkar
quelle
Dies ist eine Korrektur der ursprünglichen Antwort von @ TheGr8Adakron, kein Duplikat
Jesuisme
10

Dadurch werden nur die Registerkarte, Zeilenumbrüche, Leerzeichen und sonst nichts entfernt.

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)

AUSGABE:

IwantoRemoveallwhiespaces, newlinesandtabs

Schönen Tag!

Der Gr8 Adakron
quelle
1
Vielen Dank für die Lösung - ich denke, eine kleine Korrektur ist erforderlich, es sollte '+' anstelle von '*' sein.
Sajad Karim
4

Die oben genannten Lösungen, die auf die Verwendung von Regex hinweisen, sind nicht ideal, da dies eine so kleine Aufgabe ist und Regex mehr Ressourcenaufwand erfordert, als die Einfachheit der Aufgabe rechtfertigt.

Folgendes mache ich:

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

oder wenn Sie eine Reihe von Dingen entfernen müssten, sodass eine einzeilige Lösung unentgeltlich lang wäre:

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

Da es nichts Komplizierteres gibt, wollte ich dies teilen, da es mir geholfen hat.

Das habe ich ursprünglich benutzt:

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))

Unerwünschtes Ergebnis:

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

Das habe ich geändert in:

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'))))

Erwünschtes Ergebnis:

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

Der genaue reguläre Ausdruck, den @MattH erwähnt hatte, hat mir geholfen, ihn in meinen Code einzufügen. Vielen Dank!

Hinweis: Dies ist python3

JayRizzo
quelle