Thật không may, việc lặp lại qua các chuỗi khá chậm trong Python. Biểu thức chính quy nhanh hơn một bậc lớn hơn đối với loại điều này. Bạn chỉ cần xây dựng lớp nhân vật cho mình. Các unicodedata Module này là khá hữu ích cho việc này, đặc biệt là unicodedata.category () chức năng. Xem Cơ sở dữ liệu ký tự Unicode để biết mô tả về các loại.
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)
# or equivalently and much more efficiently
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)
Đối với 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)
# or equivalently and much more efficiently
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)
Đối với một số trường hợp sử dụng, các danh mục bổ sung (ví dụ: tất cả từ nhóm điều khiển có thể thích hợp hơn, mặc dù điều này có thể làm chậm thời gian xử lý và tăng mức sử dụng bộ nhớ đáng kể. Số ký tự trên mỗi danh mục:
Cc
(kiểm soát): 65
Cf
(định dạng): 161
Cs
(đại diện): 2048
Co
(sử dụng riêng): 137468
Cn
(chưa giao): 836601
Chỉnh sửa Thêm đề xuất từ các nhận xét.