2014-09-12 2 views
1

난 안 ASCII [126 0]에 문자열 문자를 제거하는 방법을 효율적인 방법?더 나은 방법은

//

개선 된 방법 선택 (감사) :

non_printable = re.compile("[^ -~]") 

def cleanObjEncodings(obj): 
    for k, v in vars(obj).items(): 
     if type(v) is str: 
      setattr(obj, k, non_printable.sub('', v)) 
    return obj 
+0

'+ ='으로 점진적으로 큰 문자열을 작성하는 대신'list.join'을 사용하십시오. – Kevin

+0

공백 ASCII 문자 32 (0이 아님)가 아닌가? 따라서 "인쇄 가능 ASCII 문자 (0-126)"에서 "인쇄 가능"또는 "0"이 잘못되었습니다. –

+0

공백 문자부터 물결표까지를 의미합니다. – humbug

답변

1

정규 표현식의 감각을 바꾸는 것은 어떻습니까? 문자를 문자와 일치시키는 대신 문자를 문자와 일치시키고 빈 문자열로 각각 바꿉니다.

정규 표현식의 건물을 분리하면 코드가 더욱 깨끗해집니다. 단 한 번만 수행하면됩니다.

#matches all except printable ascii characters (32 to 126) 
re_non_printable = re.compile("[^ -~]") 

def niceEncoding(string): 
    return re_non_printable.sub("", string) 
1

강조 가독성 :

from string import printable 
def niceEncoding(str): 
    printable_characters = frozenset(printable) 
    return ''.join(c for c in str if c in printable_characters) 

A는 아마 더 빨리 (실제로 프로파일하지 않은 경우) 미만 읽을 방법 :

def niceEncoding(str): 
    unprintable_characters = ''.join(chr(i) for i in (range(0, 32) + range(127, 256))) 
    return str.translate(None, unprintable_characters)