Sayangnya, pengulangan string agak lambat di Python. Ekspresi reguler melebihi urutan besarnya lebih cepat untuk hal semacam ini. Anda hanya perlu membangun kelas karakter sendiri. The unicodedata modul cukup membantu untuk ini, terutama unicodedata.category () fungsi. Lihat Database Karakter Unicode untuk penjelasan tentang kategori.
import unicodedata, re, itertools, sys
all_chars = (chr(i) for i in range(sys.maxunicode))
categories = {'Cc'}
control_chars = ''.join(c for c in all_chars if unicodedata.category(c) in categories)
control_chars = ''.join(map(chr, itertools.chain(range(0x00,0x20), range(0x7f,0xa0))))
control_char_re = re.compile('[%s]' % re.escape(control_chars))
def remove_control_chars(s):
return control_char_re.sub('', s)
Untuk Python2
import unicodedata, re, sys
all_chars = (unichr(i) for i in xrange(sys.maxunicode))
categories = {'Cc'}
control_chars = ''.join(c for c in all_chars if unicodedata.category(c) in categories)
control_chars = ''.join(map(unichr, range(0x00,0x20) + range(0x7f,0xa0)))
control_char_re = re.compile('[%s]' % re.escape(control_chars))
def remove_control_chars(s):
return control_char_re.sub('', s)
Untuk beberapa kasus penggunaan, kategori tambahan (mis. Semua dari grup kontrol mungkin lebih disukai, meskipun ini mungkin memperlambat waktu pemrosesan dan meningkatkan penggunaan memori secara signifikan. Jumlah karakter per kategori:
Cc
(kontrol): 65
Cf
(format): 161
Cs
(pengganti): 2048
Co
(penggunaan pribadi): 137468
Cn
(belum digunakan): 836601
Edit Menambahkan saran dari komentar.