Gibt es eine String-Kollaps-Library-Funktion in Python?
-
12-09-2019 - |
Frage
Gibt es eine Cross-Plattform-Library-Funktion, die eine mehrzeilige Zeichenfolge in eine einzeilige Zeichenkette ohne Wiederholungs Leerzeichen zusammenbrechen würde?
Ich habe unten mit einigen schnipp kommen, aber ich frage mich, ob es eine Standardfunktion ist die konnte ich nur importieren, die vielleicht sogar in C optimiert ist?
def collapse(input):
import re
rn = re.compile(r'(\r\n)+')
r = re.compile(r'\r+')
n = re.compile(r'\n+')
s = re.compile(r'\ +')
return s.sub(' ',n.sub(' ',r.sub(' ',rn.sub(' ',input))))
P. S. Vielen Dank für die guten Beobachtungen. ' '.join(input.split())
scheint der Sieger zu sein, wie es tatsächlich schneller läuft etwa zweimal in meinem Fall, verglichen mit einem vorkompilierte r'\s+'
regex suchen-ersetzen.
Lösung
Der eingebaute in string.split()
Methode von Whitespace aufgeteilt werden, so dass Sie das und dann kommen die resultierende Liste mit Leerzeichen wie folgt verwenden können:
' '.join(my_string.split())
Hier ist ein komplettes Testskript:
TEST = """This
is a test\twith a
mix of\ttabs, newlines and repeating
whitespace"""
print ' '.join(TEST.split())
# Prints:
# This is a test with a mix of tabs, newlines and repeating whitespace
Andere Tipps
Sie hatte die richtige Idee, die Sie gerade benötigt, um das Python-Handbuch ein wenig näher zu lesen:
import re
somewhitespace = re.compile(r'\s+')
TEST = """This
is a test\twith a
mix of\ttabs, newlines and repeating
whitespace"""
somewhitespace.sub(' ', TEST)
'This is a test with a mix of tabs, newlines and repeating whitespace'
multi_line.replace('\n', '')
wird den Job. '\n'
ist ein universelles Zeilenendezeichen in Python.