1363 Stimmen

Wie kann ich Leerzeichen aus einer Zeichenkette entfernen?

Wie entferne ich führende und nachgestellte Leerzeichen aus einer Zeichenkette in Python?

" Hello world " --> "Hello world"
" Hello world"  --> "Hello world"
"Hello world "  --> "Hello world"
"Hello world"   --> "Hello world"

3voto

James McGuigan Punkte 6675

Dies kann auch mit einem regulären Ausdruck geschehen

import re

input  = " Hello "
output = re.sub(r'^\s+|\s+$', '', input)
# output = 'Hello'

1voto

Chidhvilas Punkte 55

Wenn ich diesen Thread als Anfänger sehe, wird mir ganz schwindelig. Daher kam mit einer einfachen Abkürzung.

Obwohl str.strip() entfernt führende und nachgestellte Leerzeichen ändert nichts an den Leerzeichen zwischen den Zeichen.

words=input("Enter the word to test")
# If I have a user enter discontinous threads it becomes a problem
# input = "   he llo, ho w are y ou  "
n=words.strip()
print(n)
# output "he llo, ho w are y ou" - only leading & trailing spaces are removed 

Stattdessen str.replace() verwenden mehr Sinn, weniger Fehler und mehr auf den Punkt zu bringen. Der folgende Code kann die Verwendung von str.replace() verallgemeinern

def whitespace(words):
    r=words.replace(' ','') # removes all whitespace
    n=r.replace(',','|') # other uses of replace
    return n
def run():
    words=input("Enter the word to test") # take user input
    m=whitespace(words) #encase the def in run() to imporve usability on various functions
    o=m.count('f') # for testing
    return m,o
print(run())
output- ('hello|howareyou', 0)

Kann beim Vererben desselben in verschiedenen Funktionen hilfreich sein.

1voto

NYCRodriguez Punkte 27

Um "Whitespace" zu entfernen, das viele Einrückungsfehler verursacht, wenn Sie Ihren fertigen Code oder Programme in Pyhton ausführen. Tun Sie einfach das Folgende; offensichtlich, wenn Python hält sagen, dass der Fehler (s) ist Einrückung in Zeile 1,2,3,4,5, etc..., nur fix, dass Zeile hin und her.

Wenn Sie jedoch immer noch Probleme mit dem Programm haben, die mit Tippfehlern, Operatoren usw. zusammenhängen, sollten Sie unbedingt lesen, warum Python Sie anschreit:

Als erstes sollten Sie überprüfen, ob Sie Ihre Einrückung richtig ist. Wenn ja, dann prüfen Sie, ob Sie Tabulatoren mit Leerzeichen in Ihrem Code vermischt haben.

Denken Sie daran: Der Code sieht (für Sie) gut aus, aber der Interpreter weigert sich, ihn auszuführen. Wenn Sie dies vermuten, können Sie Ihren Code schnell in einem IDLE-Editierfenster zu bringen, dann wählen Sie Bearbeiten... "Alles auswählen aus dem wählen, bevor Sie Format... "Region enttabuisieren" wählen. Wenn Sie Tabulatoren mit Leerzeichen gemischt haben, werden dadurch alle Tabulatoren auf einmal in Leerzeichen um (und beheben alle Einrückungsprobleme).

0voto

Mitch Punkte 1312

Ich konnte keine Lösung für das, was ich suchte, finden, also habe ich einige benutzerdefinierte Funktionen erstellt. Sie können sie ausprobieren.

def cleansed(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    # return trimmed(s.replace('"', '').replace("'", ""))
    return trimmed(s)

def trimmed(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    ss = trim_start_and_end(s).replace('  ', ' ')
    while '  ' in ss:
        ss = ss.replace('  ', ' ')
    return ss

def trim_start_and_end(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    return trim_start(trim_end(s))

def trim_start(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    chars = []
    for c in s:
        if c is not ' ' or len(chars) > 0:
            chars.append(c)
    return "".join(chars).lower()

def trim_end(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    chars = []
    for c in reversed(s):
        if c is not ' ' or len(chars) > 0:
            chars.append(c)
    return "".join(reversed(chars)).lower()

s1 = '  b Beer '
s2 = 'Beer  b    '
s3 = '      Beer  b    '
s4 = '  bread butter    Beer  b    '

cdd = trim_start(s1)
cddd = trim_end(s2)
clean1 = cleansed(s3)
clean2 = cleansed(s4)

print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s1, len(s1), cdd, len(cdd)))
print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s2, len(s2), cddd, len(cddd)))
print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s3, len(s3), clean1, len(clean1)))
print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s4, len(s4), clean2, len(clean2)))

0voto

Dounchan Punkte 199

Wenn Sie möchten, dass Abschneiden der angegebenen Anzahl von Leerzeichen von links und rechts könnten Sie dies tun:

def remove_outer_spaces(text, num_of_leading, num_of_trailing):
    text = list(text)
    for i in range(num_of_leading):
        if text[i] == " ":
            text[i] = ""
        else:
            break

    for i in range(1, num_of_trailing+1):
        if text[-i] == " ":
            text[-i] = ""
        else:
            break
    return ''.join(text)

txt1 = "   MY name is     "
print(remove_outer_spaces(txt1, 1, 1))  # result is: "  MY name is    "
print(remove_outer_spaces(txt1, 2, 3))  # result is: " MY name is  "
print(remove_outer_spaces(txt1, 6, 8))  # result is: "MY name is"

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