Python'da dizelerin üzerinde yineleme yapmak maalesef oldukça yavaştır. Düzenli ifadeler bu tür şeyler için çok daha hızlıdır. Sadece karakter sınıfını kendiniz oluşturmalısınız. Unicodedata modül, özellikle bunun için oldukça yararlıdır unicodedata.category () fonksiyonu. Kategorilerin açıklamaları için Unicode Karakter Veritabanı'na bakın .
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)
Python2 için
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)
Bazı kullanım durumları için, ek kategoriler (örneğin, kontrol grubundaki tümü tercih edilebilir, ancak bu, işlem süresini yavaşlatabilir ve bellek kullanımını önemli ölçüde artırabilir. Kategori başına karakter sayısı:
Cc
(kontrol): 65
Cf
(biçim): 161
Cs
(vekil): 2048
Co
(özel kullanım): 137468
Cn
(belirtilmemiş): 836601
Düzenleme yorumlardan önerilerini ekleme.