目前我有三个映射到 ServiceHandler 的 URL 路径。如何将这三个组合成一个简洁的正则表达式,可以将 n 个参数传递给 ServiceHandler?
(r'/s/([^/]*)', ServiceHandler),
(r'/s/([^/]*)/([^/]*)', ServiceHandler),
(r'/s/([^/]*)/([^/]*)/([^/]*)', ServiceHandler)
目前我有三个映射到 ServiceHandler 的 URL 路径。如何将这三个组合成一个简洁的正则表达式,可以将 n 个参数传递给 ServiceHandler?
(r'/s/([^/]*)', ServiceHandler),
(r'/s/([^/]*)/([^/]*)', ServiceHandler),
(r'/s/([^/]*)/([^/]*)/([^/]*)', ServiceHandler)
(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
这应该适用于任何数字
(r'(?<!^)/([^/]+)', ServiceHandler)
由于我查看了 urlresolvers.py,我发现这不起作用,尽管您可以使用 regex.findall 而不是 re.search 将正确的行为修补到 urlresolvers.py 中。
你可以尝试类似的东西
(r'/s/([^/]*)/?([^/]*)/?([^/]*)', ServiceHandler)
我认为您将始终获得 3 个参数到 ServiceHandler 但未使用的参数将是空字符串