Python'daki bir dizeden baştaki ve sondaki boşlukları nasıl kaldırabilirim?
Örneğin:
" Hello " --> "Hello"
" Hello" --> "Hello"
"Hello " --> "Hello"
"Bob has a cat" --> "Bob has a cat"
Python'daki bir dizeden baştaki ve sondaki boşlukları nasıl kaldırabilirim?
Örneğin:
" Hello " --> "Hello"
" Hello" --> "Hello"
"Hello " --> "Hello"
"Bob has a cat" --> "Bob has a cat"
Yanıtlar:
Sadece bir boşluk mu yoksa ardışık tüm boşluklar mı? İkincisi, o zaman dizelerin zaten bir .strip()
yöntemi var:
>>> ' 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'
Bununla birlikte, yalnızca bir alanı kaldırmanız gerekiyorsa, bunu aşağıdakilerle yapabilirsiniz:
def strip_one_space(s):
if s.endswith(" "): s = s[:-1]
if s.startswith(" "): s = s[1:]
return s
>>> strip_one_space(" Hello ")
' Hello'
Ayrıca, str.strip()
diğer boşluk karakterlerini de kaldırdığına dikkat edin (örn. Sekmeler ve yeni satırlar). Yalnızca boşlukları kaldırmak için, kaldırılacak karakteri bağımsız değişken olarak belirtebilirsiniz strip
, yani:
>>> " Hello\n".strip(" ")
'Hello\n'
rstrip()
işlevi kastettiğini düşünüyorum . :-)
strip
yerine trim
, isinstance
yerine instanceof
, list
yerine array
, vs, vs. Neden sadece kullanım herkesin bildiği isimler ?? geez: P
strip
durumunda, tamamen katılıyorum, ancak bir liste bir diziden tamamen farklı.
Yukarıdaki cevaplarda belirtildiği gibi
myString.strip()
\ n, \ r, \ t, \ f, boşluk gibi tüm önde gelen ve sondaki boşluk karakterlerini kaldıracaktır.
Daha fazla esneklik için aşağıdakileri kullanın
myString.lstrip()
myString.rstrip()
myString.strip('\n')
ya myString.lstrip('\n\r')
ya myString.rstrip('\n\t')
vb.Dokümanlar'da daha fazla ayrıntı mevcuttur
strip
boşluk karakterleriyle de sınırlı değildir:
# remove all leading/trailing commas, periods and hyphens
title = title.strip(',.-')
Bu işlem, aşağıdaki tüm önde gelen ve sondaki boşlukları kaldıracaktır myString
:
myString.strip()
myString.strip()
belirttiğim sorulardan hiçbirine cevap vermiyor.
Bir dizede çok fazla boşluk kaldırmak istedim (aynı zamanda dize arasında, sadece başlangıç veya bitiş). Bunu yaptım, çünkü başka türlü nasıl yapacağımı bilmiyorum:
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)
Bu, artık çift boşluk kalmayıncaya kadar bir boşluktaki çift boşlukların yerini alır
Aradığım şeye bir çözüm bulamadım, bu yüzden bazı özel fonksiyonlar yarattım. Onları deneyebilirsiniz.
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)))
Belirtilen sayıda alanı soldan ve sağdan kırpmak istiyorsanız , bunu yapabilirsiniz:
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"
Bu, düzenli bir ifade ile de yapılabilir
import re
input = " Hello "
output = re.sub(r'^\s+|\s+$', '', input)
# output = 'Hello'
Python'daki bir dizeden baştaki ve sondaki boşlukları nasıl kaldırabilirim?
Bu nedenle aşağıdaki çözüm, ön ve arka boşlukları ve ara boşlukları da kaldıracaktır. Birden çok boşluk olmadan net bir dize değerleri almanız gerekiyorsa olduğu gibi.
>>> 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
Gördüğünüz gibi, bu dizedeki tüm çoklu boşlukları kaldıracaktır (çıktı Hello World
herkes içindir). Konum önemli değil. Ama gerçekten lider ve arka boşluklara ihtiyacınız varsa, o strip()
zaman bulmak olacaktır.