2013-04-17 1 views
7

프랑스어 문장을 단어로 분리하기 위해 토크 나이저를 사용하고 프랑스 문자 â을 포함하는 단어에 문제가있었습니다. Python이 매우 수수께끼 같은 정규식 유니 코드 동작

나는 문제를 격리하기 위해 노력하고 결국이 단순한 사실로 내려 삶은 :

>>> re.match(r"’", u'â', re.U) 
>>> re.match(r"[’]", u'â', re.U) 
<_sre.SRE_Match object at 0x21d41d0> 

â는이 앙상블 정규 넣어 것 경우 포함하는 패턴으로 일치합니다.

UTF-8 처리와 관련된 문제가 있습니까? 아니면 버그입니까?

내 파이썬 버전은 다음과 같습니다

Python 2.7.3 (default, Jan 2 2013, 13:56:14) 
[GCC 4.7.2] on linux2 

편집 :

흠이 embarassingly 충분히, 대체 ru 수정 문제와 패턴을 접두어로 보인다. 공식 문서가 광범위하게 사용하는 이유

이 궁금 r 다음 :((

+0

'r'은 정확하고 중요합니다. 'r' 대신 ** **'u' (대답 참조)를 추가해야합니다. –

+0

@ m.buettner : 예 답변을보기 전에 편집했습니다. 나는 계속해서'r'과'u'가하는 일을 점검했고, 실제로 둘 다 중요합니다. 감사합니다 :) – m09

답변

7

너무 유니 코드 문자열이어야합니다 귀하의 패턴 :

>>> re.match(ur"’", u'â', re.U) 
>>> re.match(ur"[’]", u'â', re.U) 

그렇지 않으면 분명히 sre 라틴 1-â을 인코딩하고있는 결과 바이트를 찾습니다 3 바이트는 utf-8 입니다.

"[’]""[\xe2\x80\x99]"과 같고, u'â'.encode('latin-1')\xe2입니다.

+0

힌트를 주셔서 감사합니다, 나는 당신이 대답하기 직전에 그것을 알아 챘습니다. – m09

+0

're.U'는 마술처럼 유니 코드를 켜지는 않지만'\ w'의 의미를 바꿉니다. –

관련 문제