2012-07-02 42 views
0

我們試圖通過Django使用BeautifulSoup來進行一些文本提取。我們有一個奇怪的錯誤,我們已經追溯到以下,我們不明白。Django涉及unicode的正則表達式混淆

如果我們發出一個標準的Python提示符下輸入:

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

我們得到的None的輸出,應該可以預期的。但是,當我們把這段代碼放在sgmllib.py中(Django最終通過我們的網站通過一串長長的調用呼叫),Python 確實與成功匹配,並返回一個對象。它出現在我們身上,好像Django在某種程度上忽略了上面字符串中的x。我認爲這必須與unicode設置相關,等等,但我們似乎無法弄清楚爲什麼Django的運行方式不同,而不是我們在香草Python 2.6會話中自己運行此代碼的原因。

爲什麼上面的正則表達式在正常運行時不匹配,但確實與匹配,當Django嘗試它時?

+1

你的數據看起來像......? –

+0

嘗試在這裏添加您的原始代碼,而不是一個例子......也許錯誤是在另一行代碼中,我們錯過了它......例如,如果您可以告訴我們這個「» 「價值來自.... – marianobianchi

回答

0

'x'是您正在測試的字符串的一部分。如果你在正則表達式中沒有考慮它,那麼它將不匹配。 Python工作正常。如果Django的行爲不同,我會感到驚訝,但也許在其他地方有一個錯誤。如果在Django中添加'x'會給你帶來問題,你可以試試這個:

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