718 Stimmen

Gibt es eine einfache Möglichkeit, mehrere Leerzeichen in einer Zeichenkette zu entfernen?

Nehmen wir diese Zeichenfolge an:

The   fox jumped   over    the log.

Verwandlung in:

The fox jumped over the log.

Was ist die einfachste (1-2 Zeilen), um dies zu erreichen, ohne zu spalten und in Listen zu gehen?

31 Stimmen

Woher kommt Ihre Abneigung gegen Listen? Sie sind ein integraler Bestandteil der Sprache, und " ".join(list_of_words) ist eines der wichtigsten Idiome, um eine Liste von Zeichenketten in eine einzige, durch Leerzeichen getrennte Zeichenkette zu verwandeln.

5 Stimmen

@Tom/@Paul: Für einfache Strings wäre (string) join einfach und nett. Aber es wird komplexer, wenn es andere Leerzeichen gibt, die man NICHT stören will... in diesem Fall wären "while" oder Regex-Lösungen am besten. Nachfolgend habe ich eine "korrekte" String-Verknüpfung gepostet, mit zeitlich begrenzten Testergebnissen für drei Möglichkeiten, dies zu tun.

11voto

devinbost Punkte 4162

Sie können die Technik des String-Splittings auch in einem Pandas DataFrame verwenden, ohne .apply(..) benutzen zu müssen, was nützlich ist, wenn Sie die Operation schnell auf eine große Anzahl von Strings anwenden müssen. Hier ist es in einer Zeile:

df['message'] = (df['message'].str.split()).str.join(' ')

9voto

Rakesh Kumar Punkte 301
import re
string = re.sub('[ \t\n]+', ' ', 'The     quick brown                \n\n             \t        fox')

Dadurch werden alle Tabulatoren, Zeilenumbrüche und mehrere Leerzeichen durch einfache Leerzeichen ersetzt.

8voto

my_name_is_njuno Punkte 125

Dieser hier tut genau das, was Sie wollen

old_string = 'The   fox jumped   over    the log '
new_string = " ".join(old_string.split())
print(new_string)

Wird zu folgenden Ergebnissen führen

The fox jumped over the log.

4voto

Stephan Geue Punkte 87

" ".join(foo.split()) ist in Bezug auf die gestellte Frage nicht ganz korrekt, weil sie auch vollständig entfernt einzelne führende und/oder nachgestellte Leerzeichen. Wenn diese also auch durch 1 Leerzeichen ersetzt werden sollen, sollten Sie etwa wie folgt vorgehen:

" ".join(('*' + foo + '*').split()) [1:-1]

Natürlich ist das weniger elegant.

4voto

gabchan Punkte 421

Eine Codezeile zum Entfernen aller zusätzlichen Leerzeichen vor, nach und innerhalb eines Satzes:

sentence = "  The   fox jumped   over    the log.  "
sentence = ' '.join(filter(None,sentence.split(' ')))

Erläuterung:

  1. Die gesamte Zeichenkette in eine Liste aufteilen.
  2. Leere Elemente aus der Liste filtern.
  3. Verbinden Sie die verbleibenden Elemente* mit einem einzigen Leerzeichen

*Die übrigen Elemente sollten aus Wörtern oder Wörtern mit Interpunktionen usw. bestehen. Ich habe dies nicht ausgiebig getestet, aber es sollte ein guter Ausgangspunkt sein. Alles Gute!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X