2012-07-02 40 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'