Hapus spasi / tab / baris baru - python


101

Saya mencoba untuk menghapus semua spasi / tab / baris baru di python 2.7 di Linux.

Saya menulis ini, yang seharusnya melakukan pekerjaan:

myString="I want to Remove all white \t spaces, new lines \n and tabs \t"
myString = myString.strip(' \n\t')
print myString

keluaran:

I want to Remove all white   spaces, new lines 
 and tabs

Sepertinya hal yang sederhana untuk dilakukan, namun saya melewatkan sesuatu di sini. Haruskah saya mengimpor sesuatu?


Lihat jawaban untuk pertanyaan terkait ini: stackoverflow.com/questions/1185524/… strip () hanya menghapus karakter di depan dan di belakangnya, bukan SEMUA karakter.
dckrooney


1
Ini berhasil untuk saya, dari: [Bagaimana cara memangkas spasi (termasuk tab)?] [1] s = s.strip ('\ t \ n \ r') [1]: stackoverflow.com/questions/1185524/…
stamat

Jawaban:


129

Gunakan str.split([sep[, maxsplit]])tanpa sepatau sep=None:

Dari dokumen :

Jika septidak ditentukan atau ada None, algoritme pemisahan yang berbeda diterapkan: run of consecutive whitespace dianggap sebagai pemisah tunggal, dan hasilnya tidak akan berisi string kosong di awal atau akhir jika string memiliki spasi kosong di depan atau di belakang.

Demo:

>>> myString.split()
['I', 'want', 'to', 'Remove', 'all', 'white', 'spaces,', 'new', 'lines', 'and', 'tabs']

Gunakan str.joinpada daftar yang dikembalikan untuk mendapatkan keluaran ini:

>>> ' '.join(myString.split())
'I want to Remove all white spaces, new lines and tabs'

58

Jika Anda ingin menghapus beberapa item spasi putih dan menggantinya dengan spasi tunggal, cara termudah adalah dengan regexp seperti ini:

>>> import re
>>> myString="I want to Remove all white \t spaces, new lines \n and tabs \t"
>>> re.sub('\s+',' ',myString)
'I want to Remove all white spaces, new lines and tabs '

Anda kemudian dapat menghapus spasi tambahan dengan .strip()jika Anda mau.


15

Gunakan perpustakaan ulang

import re
myString = "I want to Remove all white \t spaces, new lines \n and tabs \t"
myString = re.sub(r"[\n\t\s]*", "", myString)
print myString

Keluaran:

Aku ingin menghapus semua spasi, baris baru, dan tab


1
Ini adalah koreksi dari jawaban asli yang diberikan oleh @ TheGr8Adakron, bukan duplikat
Jesuisme

12
import re

mystr = "I want to Remove all white \t spaces, new lines \n and tabs \t"
print re.sub(r"\W", "", mystr)

Output : IwanttoRemoveallwhitespacesnewlinesandtabs

4
ini juga menghapus ';'
Januari

11

Ini hanya akan menghapus tab, baris baru, spasi dan tidak ada yang lain.

import re
myString = "I want to Remove all white \t spaces, new lines \n and tabs \t"
output   = re.sub(r"[\n\t\s]*", "", myString)

KELUARAN:

IwantoRemoveallwhiespaces, newlinesandtabs

Selamat siang!


1
Terima kasih atas solusinya - Saya pikir koreksi kecil diperlukan, seharusnya '+', bukan '*'.
Sajad Karim

6

Solusi di atas menyarankan penggunaan regex tidak ideal karena ini adalah tugas kecil dan regex membutuhkan lebih banyak overhead sumber daya daripada kesederhanaan tugas yang dibenarkan.

Inilah yang saya lakukan:

myString = myString.replace(' ', '').replace('\t', '').replace('\n', '')

atau jika Anda memiliki banyak hal untuk dihapus sehingga solusi baris tunggal akan menjadi sangat panjang:

removal_list = [' ', '\t', '\n']
for s in removal_list:
  myString = myString.replace(s, '')

2

Karena tidak ada hal lain yang lebih rumit, saya ingin membagikan ini karena itu membantu saya.

Ini yang awalnya saya gunakan:

import requests
import re

url = '/programming/10711116/strip-spaces-tabs-newlines-python' # noqa
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)
print("{}".format(r.content))

Hasil yang Tidak Diinginkan:

b'<!DOCTYPE html>\r\n\r\n\r\n    <html itemscope itemtype="http://schema.org/QAPage" class="html__responsive">\r\n\r\n    <head>\r\n\r\n        <title>string - Strip spaces/tabs/newlines - python - Stack Overflow</title>\r\n        <link

Inilah yang saya ubah menjadi:

import requests
import re

url = '/programming/10711116/strip-spaces-tabs-newlines-python' # noqa
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)
regex = r'\s+'
print("CNT: {}".format(re.sub(regex, " ", r.content.decode('utf-8'))))

Hasil yang diinginkan:

<!DOCTYPE html> <html itemscope itemtype="http://schema.org/QAPage" class="html__responsive"> <head> <title>string - Strip spaces/tabs/newlines - python - Stack Overflow</title>

Regex persis yang telah disebutkan @MattH, adalah yang berhasil bagi saya dalam menyesuaikannya ke dalam kode saya. Terima kasih!

Catatan: Ini python3


0

Bagaimana dengan one-liner yang menggunakan pemahaman daftar dalam gabungan?

>>> foobar = "aaa bbb\t\t\tccc\nddd"
>>> print(foobar)
aaa bbb                 ccc
ddd

>>> print(''.join([c for c in foobar if c not in [' ', '\t', '\n']]))
aaabbbcccddd
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.