Hapus semua spasi putih dalam sebuah string


788

Saya ingin menghilangkan semua spasi putih dari string, di kedua ujungnya, dan di antara kata-kata.

Saya punya kode Python ini:

def my_handle(self):
    sentence = ' hello  apple  '
    sentence.strip()

Tapi itu hanya menghilangkan spasi putih di kedua sisi string. Bagaimana cara menghapus semua spasi putih?


4
Seperti apa hasil Anda? hello apple? helloapple?
Mark Byers

4
@ JoachimPileborg, tidak persis saya pikir, karena ini juga tentang reducung spasi putih di antara kata-kata.
wal-o-mat

3
helloapple harus menjadi output saya
co2f2e

8
Perbaiki saya jika salah, tetapi "spasi putih" tidak sama dengan "karakter spasi". Jawaban saat ini yang ditandai dengan benar tidak menghapus semua spasi putih . Tapi, karena itu ditandai sebagai benar, itu pasti menjawab pertanyaan yang dimaksud? Jadi kita harus mengedit pertanyaan untuk mencerminkan jawaban yang diterima? @Kalanamith Apakah Anda ingin menghapus semua spasi putih atau hanya spasi?
AnnanFay

Jawaban:


1659

Jika Anda ingin menghapus spasi awal dan akhir, gunakan str.strip():

sentence = ' hello  apple'
sentence.strip()
>>> 'hello  apple'

Jika Anda ingin menghapus semua karakter spasi, gunakan str.replace():

(NB ini hanya menghilangkan karakter ruang ASCII "normal" ' ' U+0020tetapi tidak spasi putih lainnya )

sentence = ' hello  apple'
sentence.replace(" ", "")
>>> 'helloapple'

Jika Anda ingin menghapus ruang yang digandakan, gunakan str.split():

sentence = ' hello  apple'
" ".join(sentence.split())
>>> 'hello apple'

42
Kehebatan fungsi ini adalah ia juga menghapus '\ r \ n' dari file html yang saya terima dari Beautiful Soup.
lsheng

27
Saya suka "" .join (kalimat.split ()), ini menghapus semua spasi putih (spasi, tab, baris baru) dari mana saja dalam kalimat.
don

pemula di sini. Dapatkah seseorang menjelaskan kepada saya mengapa hasil cetak (kalimat.join (kalimat.split ())) dihasilkan menjadi 'halo apel appleapple'? Hanya ingin mengerti bagaimana kode diproses di sini.
Yannis Dran

2
@YannisDran memeriksa dokumentasi str.join () , ketika Anda menelepon sentence.join(str_list)Anda meminta python untuk bergabung dengan item dari str_list dengan sentencesebagai pemisah.
Cédric Julien

1
"".join(sentence.split())memang solusi kanonik, efisien menghapus semua spasi putih daripada hanya ruang. Mark Byers ' jawaban yang sangat baik mungkin harus telah diterima sebagai pengganti jawaban kurang berlaku ini.
Cecil Curry

263

Untuk menghapus hanya spasi gunakan str.replace:

sentence = sentence.replace(' ', '')

Untuk menghapus semua karakter spasi (spasi, tab, baris baru, dan sebagainya) Anda dapat menggunakan splitmaka join:

sentence = ''.join(sentence.split())

atau ekspresi reguler:

import re
pattern = re.compile(r'\s+')
sentence = re.sub(pattern, '', sentence)

Jika Anda hanya ingin menghapus spasi putih dari awal dan akhir, Anda dapat menggunakan strip:

sentence = sentence.strip()

Anda juga dapat menggunakan lstripuntuk menghapus spasi putih hanya dari awal string, dan rstripuntuk menghapus spasi putih dari akhir string.


Catatan: Anda tidak perlu mengkompilasi langkah, re.sub (dan teman-teman) cache pola dikompilasi. Lihat juga, jawaban Emil .
Andy Hayden

python3:yourstr.translate(str.maketrans('', '', ' \n\t\r'))
deed02392

104

Alternatifnya adalah menggunakan ekspresi reguler dan mencocokkan karakter spasi putih yang aneh ini juga. Berikut ini beberapa contohnya:

Hapus SEMUA spasi dalam string, bahkan di antara kata-kata:

import re
sentence = re.sub(r"\s+", "", sentence, flags=re.UNICODE)

Hapus spasi dalam AWAL string:

import re
sentence = re.sub(r"^\s+", "", sentence, flags=re.UNICODE)

Hapus spasi di AKHIR string:

import re
sentence = re.sub(r"\s+$", "", sentence, flags=re.UNICODE)

Hapus spasi di AWAL dan di AKHIR string:

import re
sentence = re.sub("^\s+|\s+$", "", sentence, flags=re.UNICODE)

Hapus ruang HANYA DUPLICATE:

import re
sentence = " ".join(re.split("\s+", sentence, flags=re.UNICODE))

(Semua contoh berfungsi di Python 2 dan Python 3)


Tidak bekerja untuk "\ u202a1234 \ u202c". Memberikan hasil yang sama: u '\ u202a1234 \ u202c'
Sarang

@ Sarang: Itu bukan karakter spasi putih (google mereka dan Anda akan melihat) tetapi "Tanda Baca Umum". Jawaban saya hanya berurusan dengan menghilangkan karakter yang diklasifikasikan sebagai spasi.
Emil Stenström

Ini adalah satu-satunya solusi yang saya lihat di sini yang menghilangkan karakter spasi putih unicode sial itu, terima kasih fam
CapnShanty

41

Spasi mencakup ruang, tab, dan CRLF . Jadi fungsi string yang elegan dan satu garis yang dapat kita gunakan adalah str.translate:

Python 3

' hello  apple'..translate(str.maketrans('', '', ' \n\t\r'))

ATAU jika Anda ingin teliti:

import string
' hello  apple'..translate(str.maketrans('', '', string.whitespace))

Python 2

' hello  apple'.translate(None, ' \n\t\r')

ATAU jika Anda ingin teliti:

import string
' hello  apple'.translate(None, string.whitespace)

2
Ini tidak akan membantu dengan ruang kosong Unicode seperti\xc2\xa0
Suzana

5
ans.translate( None, string.whitespace )hanya menghasilkan builtins.TypeError: translate() takes exactly one argument (2 given)untuk saya. Documents mengatakan bahwa argumen adalah tabel terjemahan, lihat string.maketrans (). Tetapi lihat komentar oleh Amnon Harel, di bawah ini.
user405

2
' hello apple'.translate(str.maketrans('', '', string.whitespace))Catatan: lebih baik membuat variabel untuk menyimpan trans-tabel jika Anda bermaksud melakukan ini berulang kali.
Shogan Aversa-Druesne

16

Untuk menghapus spasi putih dari awal dan akhir, gunakan strip.

>> "  foo bar   ".strip()
"foo bar"

1
Pertanyaannya secara khusus meminta untuk menghapus semua spasi putih dan tidak hanya di ujungnya. Mohon diperhatikan.
Shayan Shafiq

9
' hello  \n\tapple'.translate({ord(c):None for c in ' \n\t\r'})

MaK sudah menunjukkan metode "terjemahkan" di atas. Dan variasi ini berfungsi dengan Python 3 (lihat T&J ini ).


2
Terima kasih! Atau, xxx.translate( { ord(c) :None for c in string.whitespace } )untuk ketelitian.
user405

7

Hati-hati:

strip melakukan rstrip dan lstrip (menghilangkan spasi, tab spasi, tab depan, dan umpan kembali, tetapi tidak menghapusnya di tengah-tengah string).

Jika Anda hanya mengganti spasi dan tab, Anda bisa berakhir dengan CRLF tersembunyi yang tampaknya cocok dengan yang Anda cari, tetapi tidak sama.


3
import re    
sentence = ' hello  apple'
re.sub(' ','',sentence) #helloworld (remove all spaces)
re.sub('  ',' ',sentence) #hello world (remove double spaces)

3
pertanyaannya adalah menghapus semua spasi putih yang menyertakan tab dan karakter baris baru, cuplikan ini hanya akan menghapus spasi biasa.
Maximilian Peters

3

Selain itu, strip memiliki beberapa variasi:

Hapus spasi di AWAL dan AKHIR string:

sentence= sentence.strip()

Hapus spasi dalam AWAL string:

sentence = sentence.lstrip()

Hapus spasi di AKHIR string:

sentence= sentence.rstrip()

Ketiga fungsi string strip lstrip, dan rstripdapat mengambil parameter string untuk menghapus, dengan default menjadi semua ruang putih. Ini dapat membantu ketika Anda bekerja dengan sesuatu yang khusus, misalnya, Anda dapat menghapus hanya spasi tetapi tidak baris baru:

" 1. Step 1\n".strip(" ")

Atau Anda dapat menghapus koma tambahan saat membaca dalam daftar string:

"1,2,3,".strip(",")

1

menghilangkan semua spasi putih dari string, di kedua ujungnya, dan di antara kata-kata.

>>> import re
>>> re.sub("\s+", # one or more repetition of whitespace
    '', # replace with empty string (->remove)
    ''' hello
...    apple
... ''')
'helloapple'

Python docs:


Saya tahu retelah disarankan sebelumnya, tetapi saya menemukan bahwa jawaban sebenarnya untuk judul pertanyaan agak tersembunyi di antara semua opsi lainnya.
Pegang
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.