2010-04-06 5 views

답변

5
import re 
text = "this isn't alphanumeric" 
result = re.sub(r'\W','-',text) # result will be "this-isn-t-alphanumeric" 

\W 클래스 영숫자와 밑줄 ([a-zA-Z0-9_])으로 구성 \w 클래스의 역이다. 따라서 \W과 일치하지 않는 문자를 대시로 바꾸면 영숫자, 밑줄 및 대시로만 구성된 문자열이 URL에 적합합니다.

+0

그는 밑줄을 대시로 바꿀 수도 있습니다. – jemfinch

+0

가능합니다. 그렇다면'r '[\ W -]' '패턴으로 쉽게 처리 할 수 ​​있습니다. – Amber

1

이 응답은 정규식을 사용하지는 않지만 필터링 할 기호 유형을보다 잘 제어 할 수 있어야 작동합니다. unicodedata 모듈을 사용하여 문자의 범주를 검사하여 모든 기호를 제거합니다.

import unicodedata 

# See http://www.dpawson.co.uk/xsl/rev2/UnicodeCategories.html for character categories 
replace = ('Sc', 'Sk', 'Sm', 'So', 'Zs') 
def symbolsReplaceDashes(text): 
    L = [] 
    for char in text: 
     if unicodedata.category(unicode(char)) in replace: 
      L.append('-') 
     else: L.append(char) 
    return ''.join(L) 

당신은 범위는 기본 ASCII 문자와 숫자 문자를 벗어난 경우 문자를 인코딩하는 urllib.quote(output.encode('utf-8')) 같은 것을 사용해야 할 수도 있습니다.

1

regex 대신 URL에 사용할 문자열을 이스케이프하려면 urllib.quote() 또는 urllib.quote_plus()을 사용하십시오. 더 복잡한 쿼리의 경우 urllib.urlencode()을 사용하여 URL을 작성해야 할 수 있습니다. urllib.unquote()urllib.unquote_plus()으로 견적을 취소 할 수 있습니다.

+0

OP는 손실이있는 변환을 요구하기 때문에 문자열을 이스케이프하고 싶지 않으며 포스트 제목 등과 같은 항목에서 "멋진"URL을 생성하려고합니다. – Amber

관련 문제