如何在GAE/Python中为n个参数编写RESTful URL路径正则表达式?

2 投票
3 回答
2049 浏览
提问于 2025-04-15 15:04

现在我有三个网址路径,它们都指向一个叫做ServiceHandler的服务。我想把这三个路径合并成一个整洁的正则表达式,这样就可以传递任意数量的参数给ServiceHandler了。

(r'/s/([^/]*)', ServiceHandler),
(r'/s/([^/]*)/([^/]*)', ServiceHandler),
(r'/s/([^/]*)/([^/]*)/([^/]*)', ServiceHandler)

3 个回答

0

你可以试试这样的写法:

(r'/s/([^/]*)/?([^/]*)/?([^/]*)', ServiceHandler)

我觉得你总是会得到3个参数传给ServiceHandler,不过那些没有用到的参数会是空字符串。

0

这段代码应该适用于任何数字。

(r'(?<!^)/([^/]+)', ServiceHandler)

不过,我查看了urlresolvers.py这个文件,发现这样做是行不通的。不过,你可以通过使用regex.findall来修补urlresolvers.py中的正确行为,而不是用re.search。

1
(r'^/s/(([^/]*)((/[^/]+)*))$', ServiceHandler)

这样做可以匹配任意数量的

/s/foo/bar/baz/to/infinity/and/beyond/

你也可以通过类似下面的方式来限制匹配的范围

^/s/(([^/]*)((/[^/]+){0,2}))$

这样只会匹配像这样的内容

/s/foo/bar/baz
/s/foo/bar
/s/foo

但不会匹配

/s/foo/bar/baz/pirate
/s

撰写回答