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.

1voto

jw51 Punkte 11
def unPretty(S):
   # Given a dictionary, JSON, list, float, int, or even a string...
   # return a string stripped of CR, LF replaced by space, with multiple spaces reduced to one.
   return ' '.join(str(S).replace('\n', ' ').replace('\r', '').split())

0voto

Scott Anderson Punkte 572

Ich habe nicht viel in die anderen Beispiele hineingelesen, aber ich habe gerade diese Methode entwickelt, um mehrere aufeinanderfolgende Leerzeichen zu konsolidieren.

Es verwendet keine Bibliotheken und ist zwar relativ lang, was die Länge des Skripts angeht, aber es ist keine komplexe Implementierung:

def spaceMatcher(command):
    """
    Function defined to consolidate multiple whitespace characters in
    strings to a single space
    """
    # Initiate index to flag if more than one consecutive character
    iteration
    space_match = 0
    space_char = ""
    for char in command:
      if char == " ":
          space_match += 1
          space_char += " "
      elif (char != " ") & (space_match > 1):
          new_command = command.replace(space_char, " ")
          space_match = 0
          space_char = ""
      elif char != " ":
          space_match = 0
          space_char = ""
   return new_command

command = None
command = str(input("Please enter a command ->"))
print(spaceMatcher(command))
print(list(spaceMatcher(command)))

0voto

CameronE Punkte 1

Um Leerraum zu entfernen, d. h. Leerraum am Anfang, am Ende und zwischen den Wörtern, verwenden Sie:

(?<=\s) +|^ +(?=\s)| (?= +[\n\0])

Die erste or befasst sich mit führenden Leerzeichen, die zweite or befasst sich mit dem führenden Leerzeichen am Anfang der Zeichenkette und das letzte mit dem nachgestellten Leerzeichen.

Unter diesem Link finden Sie einen Test zum Nachweis der Verwendung.

https://regex101.com/r/meBYli/4

Dies ist zu verwenden mit dem re.split Funktion.

0voto

string = 'This is a             string full of spaces          and taps'
string = string.split(' ')
while '' in string:
    string.remove('')
string = ' '.join(string)
print(string)

Ergebnisse :

Dies ist eine Zeichenfolge voller Leerzeichen und Hähne

0voto

prabeennet Punkte 11

Das reicht und wird reichen: :)

# python... 3.x
import operator
...
# line: line of text
return " ".join(filter(lambda a: operator.is_not(a, ""), line.strip().split(" ")))

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