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?


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

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.


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


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!


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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.