2

目前我有三个映射到 ServiceHandler 的 URL 路径。如何将这三个组合成一个简洁的正则表达式,可以将 n 个参数传递给 ServiceHandler?

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

3 回答 3

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
于 2009-10-15T13:15:12.290 回答
0

这应该适用于任何数字

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

由于我查看了 urlresolvers.py,我发现这不起作用,尽管您可以使用 regex.findall 而不是 re.search 将正确的行为修补到 urlresolvers.py 中。

于 2009-10-15T21:01:47.297 回答
0

你可以尝试类似的东西

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

我认为您将始终获得 3 个参数到 ServiceHandler 但未使用的参数将是空字符串

于 2009-10-15T05:01:42.620 回答