Saya memiliki string yang ingin saya ganti karakter apa pun yang bukan karakter atau angka standar seperti (az atau 0-9) dengan tanda bintang. Misalnya, "h ^ & ell`., | Ow] {+ orld" diganti dengan "h * ell * o * w * orld". Perhatikan bahwa beberapa karakter seperti "^ &" diganti dengan satu tanda bintang. Bagaimana saya akan melakukan ini?
99
Jawaban:
Regex untuk menyelamatkan!
Contoh:
sumber
re.sub("[\x00-\x2F\x3A-\x40\x5B-\x60\x7B-\x7F]+", " ", ":%# unicode ΣΘΙП@./\n")
import re; regex = re.compile('[^0-9a-zA-Z]+'); regex.sub('*', 'h^&ell.,|o w]{+orld')
\W
juga untuk karakter non-kata, hampir sama tetapi memungkinkan garis bawah sebagai karakter kata (tidak tahu mengapa): docs.python.org/3.6/library/re.html#index-32Cara pythonic.
Ini tidak berhubungan dengan pengelompokan beberapa karakter yang tidak cocok secara berurutan, yaitu
"h^&i => "h**i
tidak"h*i"
seperti pada solusi regex.sumber
Mencoba:
dengan Python3:
Sunting: menyadari bahwa OP ingin mengganti non-karakter dengan '*'. Jawaban saya tidak sesuai
sumber
Gunakan
\W
yang setara dengan[^a-zA-Z0-9_]
. Periksa dokumentasinya, https://docs.python.org/2/library/re.htmlupdate: Solusi ini juga akan mengecualikan garis bawah. Jika Anda hanya ingin huruf dan angka yang dikecualikan, maka solusi oleh nneonneo lebih tepat.
sumber
\W
ini setara dengan[^a-zA-Z0-9_]
hanya di Python 2.x. Dalam Python 3.x,\W+
setara dengan[^a-zA-Z0-9_]
hanya jikare.ASCII
/re.A
flag digunakan.