2012-07-02 5 views
0

우리는 Django를 통해 BeautifulSoup를 사용하여 텍스트 추출을 시도하고 있습니다. 우리는 우리가 이해할 수없는 다음과 같은 것으로 추적 한 이상한 버그가 있습니다.유니 코드를 포함하는 장고 정규 표현식 혼동

우리는 표준 파이썬 프롬프트에서 다음을 발행하는 경우 : 예상해야한다으로

import re 
print re.match("&#([0-9]+)[^0-9]","»") 

우리는 None의 출력을 얻을. 그러나이 코드를 sgmllib.py에 넣으면 (장고는 결국 웹 사이트를 통해 긴 호출 문자열을 호출합니다), 과 성공적으로 일치하고 객체를 반환합니다. Django는 위의 문자열에서 x을 어떻게 든 무시하는 것처럼 우리에게 나타납니다. 이 코드는 유니 코드 설정과 관련이 있어야한다고 생각하지만 장고 Python 2.6 세션에서이 코드를 직접 실행하는 것과는 달리 Django가 다른 방식으로 실행되는 이유를 파악할 수 없습니다.

정상적으로 실행될 때 위의 정규 표현식이 일치하지 않지만 장고가 시도 할 때 과 일치해야하는 이유는 무엇입니까?

+1

데이터가 어떻게 보이나요? –

+0

예제 대신 여기에 원래 코드를 추가하려고 시도하십시오. 아마도 다른 코드 줄에 오류가 있습니다. 누락되었습니다. 예를 들어, "& # x00bb; " 가치는 ....에서 비롯됩니다. – marianobianchi

답변

0

'x'는 테스트중인 문자열의 일부입니다. 정규식에서 계정에 대해 설명하지 않으면 일치하지 않습니다. 파이썬이 올바르게 작동합니다. Django가 다르게 동작한다면 놀랄 것입니다. 그러나 어딘가에 버그가있을 수 있습니다. 'x'를 추가하면 장고에서 문제가 발생할 수 있습니다.

>>> rc = re.match("&#[xX]?([0-9]+)","»") 
>>> rc.group(1) 
'00'