Einfache Möglichkeit, mehrere Leerzeichen in einer Zeichenfolge zu entfernen?
Nehme an, dies ist die Zeichenfolge:
The fox jumped over the log.
Resultieren würde:
The fox jumped over the log.
Was ist die einfachste, 1-2 liner, die dies tun können? Ohne splitting und gehen in Listen...
InformationsquelleAutor der Frage TIMEX | 2009-10-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
InformationsquelleAutor der Antwort Josh Lee
foo ist dein string:
Werden Sie gewarnt, wenn diese entfernt alle whitespace-Zeichen (Leerzeichen, Tabulator, newline, return, formfeed)". (Dank an hhsaffarsiehe Kommentare) ie
"this is \t a test\n"
effektiv am Ende als"this is a test"
InformationsquelleAutor der Antwort Taylor Leese
oder
da der Raum vor dem Komma aufgeführt ist als Hauptärgernis in PEP8, wie erwähnt, durch die Elche in die Kommentare.
InformationsquelleAutor der Antwort Nasir
Mit regexes mit "\s" und es tut sich einfach string.split () - 's wird auch entfernen Sie andere whitespace-Zeichen wie Zeilenumbrüche, Zeilenschaltungen, Tabulatoren. Es sei denn, dies ist erwünscht, um nur tun mehrere Räumepräsentiere ich diese Beispiele.
EDIT: Da bin ich gar nicht zu tun, ich schlief, und neben der Korrektur eines Tippfehlers auf die letzten Ergebnisse (v3.3.3 @ 64-bit, nicht 32-bit), der offensichtliche hit me: der test-string war eher trivial.
So, ich habe ... 11 Absätze, 1000 Worte, 6665 bytes von Lorem Ipsum mehr zu bekommen-realistische Zeit-tests. Ich habe dann Hinzugefügt, random-Länge extra-Raum in:
Ich auch korrigiert, die "richtige
join
"; wenn man sich darum kümmert, die one-liner im wesentlichen einen Streifen von führenden/nachgestellten Leerzeichen, diese korrigierte version bewahrt einen führenden/nachgestellten Leerzeichen (aber nur EINE ;-). (Ich fand dies, weil Sie die zufällig angeordnetenlorem_ipsum
habe extra Leerzeichen am Ende und so konnte dieassert
.)HINWEIS:
Die "Beachten Sie, dass die Haupt -while
version" machte eine Kopie deroriginal_string
wie ich glaube, einmal geändert, auf dem ersten Lauf aufeinander folgende Läufe schneller gehen würde (wenn auch nur ein bisschen). Da dies fügt Zeit, ich habe diese Zeichenfolge kopieren, um die beiden anderen so, dass die Zeiten zeigten, das Unterschied nur in der Logik.stmt
auftimeit
- Instanzen wird nur dann ausgeführt werden, wenn; der ursprüngliche Weg, ich Tat dies, diewhile
Schleife gearbeitet, auf dem selben label,original_string
somit den zweiten Lauf, es wäre nichts zu tun. So, wie es jetzt eingerichtet, eine Funktion aufrufen, mit zwei verschiedenen Etiketten, das ist kein problem. Ich habeassert
Aussagen zu den Arbeitern, um zu überprüfen, ändern wir etwas, was jeder iteration (für diejenigen, die möglicherweise zweifelhafte). E. g., ändern sich diese, und es bricht:Dem trivialen string, es würde scheinen, dass eine while-Schleife ist die Schnellste, gefolgt von der Pythonic string-split/join, und regex hochziehen der Rückseite.
Für nicht-triviale Zeichenfolgenscheint es etwas mehr zu beachten. 32-bit-Version 2.7? Es ist regex ist die Rettung! 2.7 64-bit? Ein
while
Schleife ist am besten, durch eine anständige Marge. 32-bit-3.2, gehen mit der "richtigen"join
. 64-bit 3.3, gehen Sie für einewhile
Schleife. Wieder.In das Ende kann man die Leistung verbessern wenn/wo/Wann benötigtaber es ist immer am besten,denken Sie daran das mantra:
IANAL, YMMV, Caveat Emptor!
InformationsquelleAutor der Antwort pythonlarry
Muss Zustimmen, Paul McGuire ' s Kommentar oben. Zu mir,
ist weit vorzuziehen, bewegt sich ein regex. Meine Messungen (Linux, Python 2.5) zeigen die split-dann-Verknüpfung ist fast 5 mal schneller als der re.sub(...)", und immer noch 3 mal schneller, wenn Sie precompile den regex einmal und der Vorgang mehrere Male. Und es ist in jeder Hinsicht einfacher zu verstehen -- viel mehr pythonic.
InformationsquelleAutor der Antwort Kevin Little
Ähnlich zu den vorherigen Lösungen, aber mehr spezifisch: ersetzen Sie zwei oder mehr Leerzeichen mit einem:
InformationsquelleAutor der Antwort Peter
Einem einfachen soultion nutzen
InformationsquelleAutor der Antwort HMS
Andere alternative
InformationsquelleAutor der Antwort Kreshnik
Eine Zeile code zu entfernen Sie alle zusätzlichen Leerzeichen vor, nach und innerhalb von einem Satz:
Erklärung:
*Die restlichen Elemente sollten Wörter oder Wörter mit Satzzeichen, etc. Ich habe nicht testen Sie dies ausgiebig, aber dies sollte ein guter Ausgangspunkt. Alle die besten!!!
InformationsquelleAutor der Antwort gabchan
Dies wird entfernen Sie alle Register, neue Zeilen und mehrere Leerzeichen mit einzelnen weißen Raum.
InformationsquelleAutor der Antwort Rakesh Kumar
Dieser scheint auch zu funktionieren:
Wo die variable s repräsentiert den string.
InformationsquelleAutor der Antwort Anakimi
InformationsquelleAutor der Antwort jw51
Wenn es Leerzeichen, die Sie beschäftigen sich mit splitting auf None nicht leerer string im Rückgabewert.
https://docs.python.org/2/library/stdtypes.html#str.split
InformationsquelleAutor der Antwort jsnklln
Ergebnisse:
InformationsquelleAutor der Antwort Hassan Abdul-Kareem
Zum entfernen des weißen Bereichs, unter Berücksichtigung führende, nachfolgende und zusätzliche Leerzeichen zwischen Wörtern verwenden:
(?<=\s) +|^ +(?=\s)| (?= +[\n\0])
den ersten oder beschäftigt sich mit führenden Leerzeichen, das zweite oder beschäftigt sich mit dem start der Zeichenkette führende Leerzeichen, und der Letzte befasst sich mit nachgestellten Leerzeichen
für den Nachweis der Verwendung dieser link wird Ihnen mit einem test.
https://regex101.com/r/meBYli/4
lassen Sie mich wissen, wenn Sie finden einen Eingang, der bricht diesen regex code.
AUCH - dies ist mit der re.split-Funktion
InformationsquelleAutor der Antwort CameronE
In einigen Fällen ist es wünschenswert, ersetzen Sie hintereinander alle whitespace-Zeichen mit einer einzigen Instanz von dass Charakter. Würde man einen regulären Ausdruck verwenden, mit Rückverweise zu tun.
(\s)\1{1,}
entspricht einem beliebigen whitespace-Zeichen, gefolgt von einem oder mehr vorkommen des Charakters. Nun, alles, was Sie tun müssen, ist geben Sie die erste Gruppe (\1
) als Ersatz für das match.Wickeln diese in eine Funktion:
InformationsquelleAutor der Antwort vaultah
Ich habe nicht viel gelesen in den anderen Beispielen, aber ich habe gerade erstellt diese Methode für die Konsolidierung von mehreren aufeinanderfolgenden Leerzeichen.
Es verwendet keine Bibliotheken, und während es ist relativ lang in Bezug auf die Skript-Längen es ist nicht eine komplexe Umsetzung
InformationsquelleAutor der Antwort Scott Anderson
Schnellsten bekommen Sie für user-generierte Zeichenfolgen ist:
Dem Kurzschluss ist es etwas schneller als pythonlarry die umfassende Antwort. Gehen Sie für diese, wenn Sie nach Effizienz, und sind streng auf der Suche, um Unkraut aus extra Leerzeichen der einzige Raum Vielfalt.
InformationsquelleAutor der Antwort Hassan Baig
Können Sie auch verwenden, die string-splitting-Technik in ein Pandas DataFrame ohne zu verwenden .gelten(..), die ist nützlich, wenn Sie brauchen, um den Betrieb schnell auf einer großen Anzahl von strings. Hier ist es auf einer Zeile:
InformationsquelleAutor der Antwort devinbost