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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top