我目前正在开发一个带有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
有谁知道如何解决这个问题?
由于
答案 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/-]+$