การทำซ้ำในสตริงนั้นค่อนข้างช้าใน Python นิพจน์ทั่วไปอยู่ในลำดับความสำคัญเร็วกว่าสำหรับสิ่งประเภทนี้ คุณต้องสร้างคลาสตัวละครด้วยตัวคุณเอง unicodedataโมดูลเป็นประโยชน์มากสำหรับการนี้โดยเฉพาะอย่างยิ่งunicodedata.category ()ฟังก์ชั่น ดูฐานข้อมูลอักขระ Unicodeสำหรับคำอธิบายหมวดหมู่
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.0
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)
สำหรับบางกรณีการใช้งานหมวดหมู่เพิ่มเติม (เช่นทั้งหมดจากส่วนควบคุมกลุ่มอาจดีกว่าแม้ว่าอาจทำให้เวลาในการประมวลผลช้าลงและเพิ่มการใช้หน่วยความจำอย่างมากจำนวนอักขระต่อหมวดหมู่:
Cc
(ควบคุม): 65
Cf
(รูปแบบ): 161
Cs
(ตัวแทน): 2048
Co
(ใช้ส่วนตัว): 137468
Cn
(ยังไม่ได้กำหนด): 836601
แก้ไขเพิ่มคำแนะนำจากความคิดเห็น