python - Ganti beberapa karakter berbeda hanya dengan satu [duplikat]

Saya mencari cara untuk mengganti beberapa karakter dengan karakter lain.

Misalnya kita punya:

chars_to_be_replaced = "ihgr"

dan kami ingin mereka digantikan oleh

karakter_baru = "b"

Sehingga string baru

s = "aku lapar"

menjadi

s' = "bm kelinci".

Saya sangat menyadari Anda dapat melakukan karakter ini satu per satu dengan .replace atau dengan ekspresi reguler, tetapi saya mencari cara untuk menelusuri string hanya sekali.

Apakah re.sub hanya melewati string sekali? Apakah ada cara lain untuk melakukan ini? Terima kasih

Terima kasih


person Pierre L.    schedule 27.06.2017    source sumber
comment
Tidak ada usaha yang dikeluarkan   -  person Fallenhero    schedule 27.06.2017
comment
bagaimana string.replace() tidak berfungsi untuk Anda?   -  person Drako    schedule 27.06.2017
comment
Dengan penggantian Anda harus menelusuri string untuk setiap karakter yang ingin Anda hapus bukan?   -  person Pierre L.    schedule 27.06.2017
comment
Tidak, kamu tidak perlu melakukannya. import re; re.sub("[ihgr]", "b", "im hungry")   -  person Eric Duminil    schedule 27.06.2017
comment
Ya, itu bukan .replace()   -  person Pierre L.    schedule 27.06.2017


Jawaban (2)


Anda dapat menggunakan string.translate()

from string import maketrans

chars_to_be_replaced = "ihgr"
new_char = "b"
s = "im hungry"

trantab = maketrans(chars_to_be_replaced, new_char * len(chars_to_be_replaced))

print s.translate(trantab)
# bm bunbby
person Ghilas BELHADJ    schedule 27.06.2017

Bagaimana dengan ini:

chars_to_be_replaced = "ihgr"
new_char = "b"

my_dict = {k: new_char for k in chars_to_be_replaced}

s = "im hungry"

new_s = ''.join(my_dict.get(x, x) for x in s)
print(new_s)  # bm bunbby

''.join(my_dict.get(x, x) for x in s): untuk setiap huruf dalam string asli Anda, ia mencoba untuk mendapatkan nilai kamusnya, kecuali jika tidak ada, maka yang asli akan dikembalikan.


CATATAN: Anda dapat mempercepatnya (sedikit) dengan meneruskan list ke join alih-alih generator:

new_s = ''.join([my_dict.get(x, x) for x in s])
person Ma0    schedule 27.06.2017
comment
Saya hanya menguji pada contoh kecil ini tetapi memerlukan waktu lebih lama dibandingkan menggunakan empat kali penggantian. Perlu menggunakannya pada contoh yang lebih representatif - person Pierre L.; 27.06.2017