在"(/(?:[a-zA-Z0-9 _-] + /?)*)"之后搜索正则表达式。并且不以" / xyz"开头

时间:2014-12-16 21:23:10

标签: python regex google-app-engine

我目前正在开发一个带有webapp2的python项目,您可以在其中将URL(由正则表达式定义)映射到特定的处理程序类。 (此类处理URL请求并响应它)

目前所有请求都遵循正则表达式:

(/(?:[a-zA-Z0-9_-]+/?)*)

映射到我的HomeHandler()类。

现在我需要更改正则表达式:

URL DOES NOT START with "/xyz"  AND followed by "(/(?:[a-zA-Z0-9_-]+/?)*)"

示例:

/xyz/abcdefABCD2341/488888/edit -> should NOT be matched
/notxyz/abcdefABCD2341/488888/edit -> should be matched

有谁知道如何解决这个问题?

由于

4 个答案:

答案 0 :(得分:3)

这应该可以解决您的问题...我已经插入负向预测,检查xyz并添加^$,以便检查整个字符串匹配,否则您的正则表达式不变< / p>

^(/(?!xyz)(?:[a-zA-Z0-9_-]+/?)*)$

Your test case,将开头更改为xyz

答案 1 :(得分:2)

我认为&#34;负面前瞻断言&#34;可以帮助你。转到下面的链接并搜索&#34;否定前瞻断言&#34;。 https://docs.python.org/3.4/library/re.html 在您的情况下,您可以尝试:

^(?!/xyz)(/(?:[a-zA-Z0-9_-]+/?)*)

答案 2 :(得分:2)

其他答案正则表达式是正确的,但对于Google App Engine,app.yaml依赖于顺序,因此您可以添加处理程序来覆盖/ xyz案例,然后处理其他所有内容的处理程序。

所以对你的说法:

# app.yaml
handlers:

- url: /xyz.*
  script: xyzHandler.app

- url: .*
  script: homeHandler.app

答案 3 :(得分:0)

这应该只是:

^/(?!xyz)[\w/-]+$