Django正则表达式混淆涉及unicode

时间:2012-07-02 21:36:03

标签: regex django beautifulsoup

我们试图通过Django使用BeautifulSoup进行一些文本提取。我们有一个奇怪的错误,我们已经追溯到以下我们不理解。

如果我们在标准Python提示符中发出以下内容:

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

我们得到None的输出,应该是预期的。但是,当我们将此代码放入sgmllib.py(Django最终通过我们的网站调用一长串调用)时,Python 成功匹配此函数,并返回一个对象。它似乎在我们看来,好像Django在某种程度上忽略了上面字符串中的x。我认为这必须与unicode设置有关,等等,但我们似乎无法弄清楚为什么Django的运行方式不同,而不是我们在一个vanilla Python 2.6会话中运行这段代码。

为什么上面的正则表达式在正常运行时不匹配,但是当emango尝试时, 匹配?

1 个答案:

答案 0 :(得分:0)

'x'是您正在测试的字符串的一部分。如果您在正则表达式中没有考虑它,那么它将不匹配。 Python工作正常。如果Django行为不同,我会感到惊讶,但也许在其他地方有一个bug。如果在Django中添加'x'会给你带来问题,你可以试试这个:

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