it-swarm.com.de

Leerzeichen/Tabs/Zeilenumbrüche entfernen - Python

Ich versuche, alle Leerzeichen/Tabs/Newlines 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?

54
bachurim09

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

Von docs :

Wenn sep nicht angegeben ist oder None ist, lautet ein anderer Aufteilungsalgorithmus angewendet: Läufe von aufeinanderfolgenden Leerzeichen werden als einzelnes .__ betrachtet. separator, und das Ergebnis enthält am Anfang keine leeren Zeichenfolgen oder enden, wenn die Zeichenfolge führenden oder nachgestellten Leerzeichen aufweist.

Demo:

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

Verwenden Sie str.join in der zurückgegebenen Liste, um diese Ausgabe abzurufen:

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

Wenn Sie mehrere Whitespace-Elemente entfernen und sie durch einzelne Leerzeichen ersetzen möchten, können Sie dies am einfachsten mit einem Regex-Ausdruck tun:

>>> 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 das nachstehende Leerzeichen mit .strip() entfernen, wenn Sie möchten.

35
MattH
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
10
Manish Mulani

Sehen Sie sich die Antwort auf diese verwandte Frage an: Wie wird Leerzeichen (einschließlich Tabulatoren) getrimmt?

strip () entfernt nur führende und nachgestellte Zeichen, nicht ALLE Zeichen.

6
dckrooney

Verwenden Sie die Bibliothek 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

Ausgabe:

IwanttoRemoveallwhitespaces, Newlinesandabs

6

Dies entfernt nur die Registerkarte, Zeilenumbrüche, Leerzeichen und nichts anderes.

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

Schönen Tag!

1
The Gr8 Adakron

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

Das habe ich ursprünglich benutzt:

import requests
import re

url = 'https://stackoverflow.com/questions/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 = 'https://stackoverflow.com/questions/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>

Die genaue Regex, die @MattH erwähnt hatte, war das, was für mich beim Einpassen in meinen Code funktioniert hat. Vielen Dank!

Hinweis: Dies ist python3

0
JayRizzo

Die obigen Lösungen, die die Verwendung von regulären Ausdrücken vorschlagen, sind nicht ideal, da dies eine so kleine Aufgabe ist und reguläre Ausdrücke mehr Ressourcenaufwand erfordern, 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 unbegründet lang wäre:

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