Wie entferne ich führende und nachfolgende Leerzeichen aus einer Zeichenfolge in Python?
Zum Beispiel:
" Hello " --> "Hello"
" Hello" --> "Hello"
"Hello " --> "Hello"
"Bob has a cat" --> "Bob has a cat"
Wie entferne ich führende und nachfolgende Leerzeichen aus einer Zeichenfolge in Python?
Zum Beispiel:
" Hello " --> "Hello"
" Hello" --> "Hello"
"Hello " --> "Hello"
"Bob has a cat" --> "Bob has a cat"
Antworten:
Nur ein Leerzeichen oder alle aufeinander folgenden Leerzeichen? Wenn die zweite, dann haben Zeichenfolgen bereits eine .strip()
Methode:
>>> ' Hello '.strip()
'Hello'
>>> ' Hello'.strip()
'Hello'
>>> 'Bob has a cat'.strip()
'Bob has a cat'
>>> ' Hello '.strip() # ALL consecutive spaces at both ends removed
'Hello'
Wenn Sie jedoch nur ein Leerzeichen entfernen müssen, können Sie dies tun mit:
def strip_one_space(s):
if s.endswith(" "): s = s[:-1]
if s.startswith(" "): s = s[1:]
return s
>>> strip_one_space(" Hello ")
' Hello'
Beachten Sie auch, dass auch str.strip()
andere Leerzeichen entfernt werden (z. B. Tabulatoren und Zeilenumbrüche). Um nur Leerzeichen zu entfernen, können Sie das zu entfernende Zeichen als Argument angeben strip
, z.
>>> " Hello\n".strip(" ")
'Hello\n'
rstrip()
Funktion. :-)
strip
statt trim
, isinstance
statt instanceof
, list
statt array
, etc, etc. Warum nicht einfach Gebrauch die Namen, mit denen jeder vertraut ist? Meine Güte: P
strip
Fall stimme ich voll und ganz zu, aber eine Liste unterscheidet sich völlig von einem Array.
Wie in den obigen Antworten ausgeführt
myString.strip()
entfernt alle führenden und nachfolgenden Leerzeichen wie \ n, \ r, \ t, \ f, Leerzeichen.
Verwenden Sie für mehr Flexibilität Folgendes
myString.lstrip()
myString.rstrip()
myString.strip('\n')
oder myString.lstrip('\n\r')
oder myString.rstrip('\n\t')
so weiter.Weitere Details finden Sie in den Dokumenten
strip
ist auch nicht auf Leerzeichen beschränkt:
# remove all leading/trailing commas, periods and hyphens
title = title.strip(',.-')
Dadurch werden alle führenden und nachfolgenden Leerzeichen entfernt in myString
:
myString.strip()
myString.strip()
beantwortet keine der Fragen, die ich gestellt habe.
Ich wollte die zu vielen Leerzeichen in einer Zeichenfolge entfernen (auch zwischen den Zeichenfolgen, nicht nur am Anfang oder Ende). Ich habe das gemacht, weil ich nicht weiß, wie ich es anders machen soll:
string = "Name : David Account: 1234 Another thing: something "
ready = False
while ready == False:
pos = string.find(" ")
if pos != -1:
string = string.replace(" "," ")
else:
ready = True
print(string)
Dies ersetzt doppelte Leerzeichen in einem Leerzeichen, bis Sie keine doppelten Leerzeichen mehr haben
Ich konnte keine Lösung für das finden, wonach ich suchte, 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)))
Wenn Sie die angegebene Anzahl von Leerzeichen von links und rechts kürzen möchten , können 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"
Dies kann auch mit einem regulären Ausdruck erfolgen
import re
input = " Hello "
output = re.sub(r'^\s+|\s+$', '', input)
# output = 'Hello'
Wie entferne ich führende und nachfolgende Leerzeichen aus einer Zeichenfolge in Python?
Die folgende Lösung entfernt also führende und nachfolgende Leerzeichen sowie mittlere Leerzeichen. Zum Beispiel, wenn Sie eindeutige Zeichenfolgenwerte ohne mehrere Leerzeichen erhalten müssen.
>>> str_1 = ' Hello World'
>>> print(' '.join(str_1.split()))
Hello World
>>>
>>>
>>> str_2 = ' Hello World'
>>> print(' '.join(str_2.split()))
Hello World
>>>
>>>
>>> str_3 = 'Hello World '
>>> print(' '.join(str_3.split()))
Hello World
>>>
>>>
>>> str_4 = 'Hello World '
>>> print(' '.join(str_4.split()))
Hello World
>>>
>>>
>>> str_5 = ' Hello World '
>>> print(' '.join(str_5.split()))
Hello World
>>>
>>>
>>> str_6 = ' Hello World '
>>> print(' '.join(str_6.split()))
Hello World
>>>
>>>
>>> str_7 = 'Hello World'
>>> print(' '.join(str_7.split()))
Hello World
Wie Sie sehen können, werden dadurch alle mehreren Leerzeichen in der Zeichenfolge entfernt (Ausgabe ist Hello World
für alle). Die Lage spielt keine Rolle. Aber wenn Sie wirklich führende und nachfolgende Leerzeichen benötigen, dann sind Sie hier genau richtig strip()
.