2010-01-17 4 views
1
def remove_whitespaces(value): 
    "Remove all whitespaces" 
    p = re.compile(r'\s+') 
    return p.sub(' ', value) 

위의 코드는 태그를 제거하지만 "all"공백을 값에서 제거하지 않습니다.공백 제거 용 정규식

감사

+2

점점 더 우스꽝스러워지고 있습니다. 이 코드가 무엇을하는지 이해합니까? – SilentGhost

+0

예, 정규 표현식 부분은 제외합니다. – 3zzy

+0

그리고 뭐가 그렇게 우스운가요? 몇 시간 후에 몇 가지 질문을하는거야? Thats "우스운"? – 3zzy

답변

6

가장 빠른 일반적인 접근 방식은 문자열의 빠르고 강력한 .translate 방법에 찬성 된 RE를 피하고 파이썬 2. * 문자열, 즉 bytestrings - 유니 코드의 문자열 '.translate은 약간 다릅니다. 유니 코드 문자열에서 유니 코드 문자열에 대한 ord 값 또는 None 값의 매핑이어야하는 단일 인수가 필요합니다. 삭제. 즉, dict의 편리한 .fromkeys classmethod의 활용 :

nospace = dict.fromkeys(ord(c) for c in string.whitespace) 

def unicode_remove_whitespace(value): 
    return value.translate(nospace) 

정확히 같은 문자 세트를 제거 할 수 있습니다. 물론 유니 코드에는 공백으로 간주하여 제거하려는 문자가 더 많습니다. 따라서 string 모듈을 기반으로하는이 간단한 방법을 사용하는 대신 모듈 unicodedata의 정보를 기반으로 매핑 unicode_nospace을 작성하려고합니다.

3
p.sub(' ', value) 

p.sub('', value) 

전 대체하는 단일 공간, 아무것도 후자을 대체 모든 공백해야한다.

1

value.join (p.split()) ''.join (value.split())이 효과가 있습니까? 이에 "일반"적용, 2.6에서

import string 
identity = string.maketrans('', '') 

def remove_whitespace(value): 
    return value.translate(identity, string.whitespace) 

, 그것은 더 간단 그냥

return value.translate(None, string.whitespace) 

참고 :

+0

나는 '' '.join (value.split())' –

+0

을 의미한다고 생각합니다. 예, 고맙습니다. 너무 빨리 읽었습니다. –

0

기능이 경우에는 잘 작동합니다.

0

@OP 외부 정규식 패턴을 컴파일하십시오. 따라서 프로 시저를 사용할 때마다 re.compile을 호출 할 필요가 없습니다. 또한 공백을 제거하지 않는 한 공간으로 대체 하시겠습니까?

p = re.compile(r'\s+') 
def remove_whitespaces(p,value): 
    "Remove all whitespaces"  
    return p.sub('', value) 

마지막으로, 정규 표현식을 사용하지 않는 다른 방법은 공백에 분할

def remove_whitespaces(value): 
    "Remove all whitespaces"  
    return ''.join(value.split()) 
1

re.sub('\s*', '', value)도 작동해야 다시 합류하는 것입니다!