불행히도 파이썬에서는 문자열을 반복하는 것이 다소 느립니다. 정규 표현식은 이런 종류의 일보다 훨씬 더 빠릅니다. 캐릭터 클래스를 직접 구축하면됩니다. 한편 UnicodeData 모듈은 특히이에 매우 도움이된다 unicodedata.category () 함수입니다. 범주에 대한 설명은 유니 코드 문자 데이터베이스 를 참조하십시오 .
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의 경우
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
편집 댓글에서 제안을 추가합니다.