Python Hapus 3 karakter terakhir dari sebuah string


146

Saya mencoba untuk menghapus 3 karakter terakhir dari string dengan python, saya tidak tahu apa karakter ini jadi saya tidak bisa menggunakan rstrip, saya juga perlu menghapus spasi putih dan mengubahnya menjadi huruf besar

contohnya adalah:

foo = "Bs12 3ab"
foo.replace(" ", "").rstrip(foo[-3:]).upper()

Ini berfungsi dan memberi saya BS12 yang saya inginkan, namun jika karakter 4 & 3 terakhir sama, saya kehilangan keduanya, misalnya jika foo = "BS11 1AA"saya hanya mendapatkan'BS'

Contohnya foobisa:

BS1 1AB
bs11ab
BS111ab

String dapat terdiri dari 6 atau 7 karakter dan saya harus membuang 3 yang terakhir (dengan asumsi tidak ada spasi)

Ada tips?

Jawaban:


278

Menghapus setiap dan semua spasi putih:

foo = ''.join(foo.split())

Menghapus tiga karakter terakhir:

foo = foo[:-3]

Mengubah ke huruf besar:

foo = foo.upper()

Semua kode itu dalam satu baris:

foo = ''.join(foo.split())[:-3].upper()

9
Saya ingin mencatat bahwa ''.join(foo.split())lebih baik daripada foo.replace(' ', ''), ketika digunakan pada string unicode karena menghilangkan karakter spasi putih , selain ' 'karakter (khususnya, ruang non-breaking juga dihapus). Yang mengatakan replace()mungkin jauh lebih cepat, sehingga dapat digunakan jika, katakanlah, string input diketahui dikodekan dalam ASCII, yang hanya memiliki satu karakter spasi (saya menggunakan terminologi Python 2, di sini.)
Eric O Lebigot

90

Tidak berfungsi seperti yang Anda harapkan karena strip berbasis karakter. Anda perlu melakukan ini sebagai gantinya:

foo = foo.replace(' ', '')[:-3].upper()

11
Itu tidak menghapus WHITESPACE seperti yang diminta OP; itu hanya menghapus karakter SPACE.
John Machin

15
>>> foo = "Bs12 3ab"
>>> foo[:-3]
'Bs12 '
>>> foo[:-3].strip()
'Bs12'
>>> foo[:-3].strip().replace(" ","")
'Bs12'
>>> foo[:-3].strip().replace(" ","").upper()
'BS12'

2
@ Lidia Ya, strip hanya menghapus spasi putih dari awal dan akhir string.
Eliezer Miron

Perlu dicatat bahwa Anda tidak dapat mengaitkan ini misalnya foo [3:] foo [: - 3]
crafter

9

Anda mungkin sedikit salah paham tentang rstrip, ini tidak menghapus string tetapi karakter apa pun dalam string yang Anda tentukan.

Seperti ini:

>>> text = "xxxxcbaabc"
>>> text.rstrip("abc")
'xxxx'

Jadi sebagai gantinya, gunakan saja

text = text[:-3] 

(setelah mengganti spasi dengan apa-apa)


3
>>> foo = 'BS1 1AB'
>>> foo.replace(" ", "").rstrip()[:-3].upper()
'BS1'

3

Saya mencoba menghindari ekspresi reguler, tetapi ini tampaknya berhasil:

string = re.sub("\s","",(string.lower()))[:-3]


1
string.lower () harus berupa string.upper (). Kesalahanku.
krs1

ini adalah satu-satunya solusi yang menangani spasi putih dengan baik
Erik Aronesty

1

Ada apa dengan ini?

foo.replace(" ", "")[:-3].upper()

1
  1. split
  2. slice
  3. concentrate

Ini adalah latihan yang bagus untuk pemula dan mudah dicapai.

Metode lanjutan lainnya adalah fungsi seperti ini:

def trim(s):
    return trim(s[slice])

Dan untuk pertanyaan ini, Anda hanya ingin menghapus karakter terakhir, sehingga Anda dapat menulis seperti ini:

def trim(s):
    return s[ : -3] 

Saya pikir Anda sudah selesai untuk peduli tentang apa tiga karakter itu, jadi Anda kehilangan. Anda hanya ingin menghapus tiga yang terakhir, namun siapa mereka!

Jika Anda ingin menghapus beberapa karakter tertentu, Anda dapat menambahkan beberapa penilaian jika:

def trim(s):
    if [conditions]:   ### for some cases, I recommend using isinstance().
        return trim(s[slice])

0

Tidakkah Anda melakukan operasi dengan urutan yang salah? Kebutuhan Anda tampaknyafoo[:-3].replace(" ", "").upper()


poin di berikut ini dalam pertanyaan >>> (dengan asumsi tidak ada ruang putih)
Noctis Skytower

0

Ini tergantung pada definisi spasi putih Anda. Saya biasanya akan memanggil spasi putih sebagai spasi, tab, jeda baris dan carriage return. Jika ini adalah definisi Anda, Anda ingin menggunakan regex dengan \ s untuk mengganti semua karakter spasi putih:

import re

def myCleaner(foo):
    print 'dirty: ', foo
    foo = re.sub(r'\s', '', foo)
    foo = foo[:-3]
    foo = foo.upper()
    print 'clean:', foo
    print

myCleaner("BS1 1AB")
myCleaner("bs11ab")
myCleaner("BS111ab")
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.