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?

bachurim09
sumber
Lihat jawaban untuk pertanyaan terkait ini: stackoverflow.com/questions/1185524/… strip () hanya menghapus karakter di depan dan di belakangnya, bukan SEMUA karakter.
dckrooney
1
mungkin berguna: stackoverflow.com/questions/8928557/…
newtover
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'
Ashwini Chaudhary
sumber
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.

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

Shivam K. Thakkar
sumber
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
Manish Mulani
sumber
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!

The Gr8 Adakron
sumber
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, '')
rosstripi.dll
sumber
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

JayRizzo
sumber
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
sqqqrly.dll
sumber