Bagaimana cara memotong spasi putih dari string?


1157

Bagaimana cara menghapus spasi putih terkemuka dan tambahan dari string dengan Python?

Sebagai contoh:

" Hello " --> "Hello"
" Hello"  --> "Hello"
"Hello "  --> "Hello"
"Bob has a cat" --> "Bob has a cat"

17
Pertanyaan ini baru saja membuat saya berbicara dengan rekan kerja tentang pengupasan selama 3 menit. Bagi siapa pun yang bergabung setengah jalan, mereka akan mengira kita semua sedikit bekerja di malam hari.
Whitecat

Jawaban:


1736

Hanya satu ruang, atau semua ruang berurutan? Jika yang kedua, maka string sudah memiliki .strip()metode:

>>> ' 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'

Jika Anda hanya perlu menghapus satu ruang saja, Anda bisa melakukannya dengan:

def strip_one_space(s):
    if s.endswith(" "): s = s[:-1]
    if s.startswith(" "): s = s[1:]
    return s

>>> strip_one_space("   Hello ")
'  Hello'

Juga, perhatikan bahwa juga str.strip()menghapus karakter spasi putih (misalnya tab dan baris baru). Untuk menghapus hanya spasi, Anda dapat menentukan karakter yang akan dihapus sebagai argumen strip, yaitu:

>>> "  Hello\n".strip(" ")
'Hello\n'

19
Jika Anda memerlukan fungsi strip, misalnya fungsi peta, Anda dapat mengaksesnya melalui str.strip (), seperti halnya map (str.strip, collection_of_s)
Ward

1
Apakah ada cara untuk hanya memotong spasi putih di ujungnya?
Nikhil Girraj

2
@killthrush Terima kasih untuk referensi, tapi saya pikir Anda maksud rstrip()fungsinya. :-)
Nikhil Girraj

14
Terkadang saya merasa seperti python sengaja menghindari nama-nama yang diterima dengan baik dan bermakna yang digunakan sebagian besar bahasa untuk menjadi "unik" dan "berbeda" - stripalih - alih trim, isinstancebukannya instanceof, listbukannya , bukannya array, dll, dll. Mengapa tidak hanya menggunakan nama-nama yang semua orang kenal? Ya ampun: P
Gershom

3
@ GershomMaes dalam stripkasus ini, saya sepenuhnya setuju, tetapi daftar sama sekali berbeda dari array.
JFA

262

Seperti yang ditunjukkan dalam jawaban di atas

myString.strip()

akan menghapus semua karakter spasi putih depan dan belakang seperti \ n, \ r, \ t, \ f, spasi.

Untuk lebih fleksibel gunakan yang berikut ini

  • Menghapus hanya karakter spasi putih terkemuka :myString.lstrip()
  • Menghapus hanya mengikuti karakter spasi:myString.rstrip()
  • Menghapus karakter spasi putih khusus : myString.strip('\n')atau myString.lstrip('\n\r')atau myString.rstrip('\n\t')dan sebagainya.

Rincian lebih lanjut tersedia di dokumen


saya percaya adalah \ r \ n bukan \ n \ r ... (tidak dapat mengedit pos - tidak cukup karakter yang dimodifikasi)
StefanNch

8
@StefanNch: Urutan karakter tidak masalah sama sekali. \ n \ r juga akan menghapus \ r \ n.
Johannes Overmann

122

strip tidak terbatas pada karakter spasi putih juga:

# remove all leading/trailing commas, periods and hyphens
title = title.strip(',.-')

54

Ini akan menghapus semua spasi putih depan dan belakang di myString:

myString.strip()

3
Posting ini hanya memiliki kode, tidak menjelaskan apa fungsinya. Apakah itu menghapus spasi putih terkemuka, atau keduanya? Apakah hanya menghapus spasi atau setiap jenis spasi putih? Bisakah Anda membuatnya menghapus spasi saja, atau apakah ada fungsi lain untuk melakukannya? Jika menghapus spasi utama dan akhir, dapatkah Anda membuatnya menghapus hanya satu dari keduanya, atau apakah ada (an) fungsi lain untuk melakukan pekerjaan itu? myString.strip()tidak menjawab salah satu pertanyaan yang telah saya nyatakan.
EKons

8
Agar adil, OP secara khusus meminta metode yang menghilangkan spasi spasi awal dan akhir dari string. Jawaban yang cukup bagus untuk saya
Denis Lins

21

Anda ingin menghapus ():

myphrases = [ " Hello ", " Hello", "Hello ", "Bob has a cat" ]

for phrase in myphrases:
    print phrase.strip()

0

Saya ingin menghapus spasi terlalu banyak dalam sebuah string (juga di antara string, tidak hanya di awal atau akhir). Saya membuat ini, karena saya tidak tahu bagaimana melakukannya:

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)

Ini menggantikan ruang ganda dalam satu ruang sampai Anda tidak memiliki ruang ganda lagi


Meskipun ini bekerja, itu tidak terlalu efisien, gunakan ini sebagai gantinya: stackoverflow.com/a/2077906/1240286
Arklur

0

Saya tidak dapat menemukan solusi untuk apa yang saya cari jadi saya membuat beberapa fungsi khusus. Anda bisa mencobanya.

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)))

0

Jika Anda ingin memangkas jumlah ruang tertentu dari kiri dan kanan , Anda bisa melakukan ini:

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"

0

Ini juga bisa dilakukan dengan ekspresi reguler

import re

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

0

Bagaimana cara menghapus spasi putih terkemuka dan tambahan dari string dengan Python?

Jadi solusi di bawah ini akan menghapus spasi putih depan dan belakang juga spasi putih menengah. Seperti jika Anda perlu mendapatkan nilai string yang jelas tanpa beberapa spasi putih.

>>> 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

Seperti yang Anda lihat ini akan menghapus semua spasi putih dalam string (output Hello Worlduntuk semua). Lokasi tidak masalah. Tetapi jika Anda benar-benar perlu memimpin dan mengikuti spasi, maka strip()akan ditemukan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.