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?

Sam Machin
sumber

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()
Noctis Skytower
sumber
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()
Nadia Alramli
sumber
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'
ghostdog74
sumber
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)

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

Saya mencoba menghindari ekspresi reguler, tetapi ini tampaknya berhasil:

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

krs1
sumber
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()
abyx
sumber
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])
Jaylin
sumber
0

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

AndreaG
sumber
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")
Lee Joramo
sumber