2010-03-09 1 views

답변

3

당신은 유니 코드 플래그

\w+ 

를 사용할 수 있습니다. 나는 네 이름에 숫자 나 밑줄이있을 위험이 없다고 생각한다.

>>> re.findall('\w+', 'Márquez', re.U) 
['Márquez'] 

또한 물음표 후 P을 누락하는 것 :

import locale 
locale.setlocale(locale.LC_ALL, '') 

을 다음 regexpes와 re.LOCALE 옵션을 사용 파이썬 < 3 (?P<name>[a-zA-Z]+)

+0

이것은 파이썬 3.0에 좋지 않습니다. 일반 (비 유니 코드) 문자열에 유니 코드 옵션을 사용하는 아이디어가 마음에 들지 않습니다. –

+0

@Jacek : ASCII가 아닌 문자열이 유니 코드가 아닌 이유는 무엇입니까? – SilentGhost

+0

Python 2.x에서 str 유형과 "xxxx"리터럴에는 바이트 문자열 만 포함됩니다. 이 바이트는 특정 인코딩의 일부 문자 일 수 있지만 인코딩 정보가없는 경우 바이트 만입니다. 인코딩이 'utf-8'또는 (77, 225, 114, 113, 117, 101, 122) 인 경우 'Mrquez'는 (77, 195, 161, 114, 113, 117, 101, 122)) (7 바이트) 인코딩이 ISO 8859-1 인 경우. 그리고 ISO 8859-7에서 디코딩 될 때 같은 값이 "Mαrquez"가됩니다. 같은 바이트, 다른 문자. 인코딩을 알지 못하면 유니 코드 문자를 말할 수 없습니다. –

0

당신은 로켈을 활성화 할 수 있습니다 :

re.findall('\w+', 'Márquez', re.LOCALE) 

아마도 Unicode가 더 좋은 방법 일 것입니다.하지만 데이터를 디코딩 한 후 로컬 인코딩으로 인코딩해야합니다.