Google应用引擎正则表达式

时间:2010-10-27 20:36:25

标签: python regex google-app-engine

我正在开发Google appengine项目,但我遇到了一个窘境。以下应该(如果正则表达式是正常的)将不包含单词“test”的所有内容重定向到MainPage类,其余部分重定向到TestPage类。

application = webapp.WSGIApplication(
                                     [
                                        ('[^(test)]*', MainPage),
                                        ('.+', TestPage)
                                     ],
                                     debug=True)

相反,我发现正在解释正则表达式:

('[^tes]*', MainPage)

这意味着包含t,e或s的任何内容都不会指向MainPage(在这种情况下,它将指向TestPage)。显然,解决方法是重新编写TestPage正则表达式,但我不想进行解决。 无需重写即可正常工作。

我在某个地方错过了一些图书馆吗?这是配置问题吗?在运行run_wsgi_app之前调用函数或设置属性的问题要少得多,但这看起来不一致。


更新

事实证明,罪魁祸首是两件事。首先,我的语法错误(Mea culpa)。其次,我用来确认正则表达式的工具表示表达式与“test”不匹配,但它匹配“t est”。

3 个答案:

答案 0 :(得分:7)

实际上,除了方括号内的主要插入符号(例如[^est()])之外,它被解释为与字符的任何重新排列相同。标准正则表达式语法不包括指定特定正则表达式匹配的语言的补充的直接方法。

在这种情况下,您无需担心这一点。按照Erik Noren的建议改变匹配表达式的顺序,如下所示:

application = webapp.WSGIApplication(
                                     [
                                        ('test', TestPage)
                                        ('.+', MainPage),
                                     ],
                                     debug=True)

这直截了当地完成了相同的结果。

答案 1 :(得分:3)

为什么不反转呢?检查测试更简单,而不是检查[不'测试']。与TestPage匹配的路由,其余的路由到MainPage。

(不工作)的区别:

'[^(test)]*'

'test'

除非我完全弄错了。

答案 2 :(得分:3)

正则表达式中的方括号表示法是一组字符,父母在其中没有特殊含义。所以[^(test)]匹配除't','e','s','('或')之外的任何字符