現在、ServiceHandler にマップする 3 つの URL パスがあります。n個の引数をServiceHandlerに渡すことができる1つのきちんとした正規表現に3つを組み合わせるにはどうすればよいですか?
(r'/s/([^/]*)', ServiceHandler),
(r'/s/([^/]*)/([^/]*)', ServiceHandler),
(r'/s/([^/]*)/([^/]*)/([^/]*)', ServiceHandler)
現在、ServiceHandler にマップする 3 つの URL パスがあります。n個の引数をServiceHandlerに渡すことができる1つのきちんとした正規表現に3つを組み合わせるにはどうすればよいですか?
(r'/s/([^/]*)', ServiceHandler),
(r'/s/([^/]*)/([^/]*)', ServiceHandler),
(r'/s/([^/]*)/([^/]*)/([^/]*)', ServiceHandler)
(r'^/s/(([^/]*)((/[^/]+)*))$', ServiceHandler)
任意の量に一致するトリックを行う必要があります
/ s / foo / bar / baz / to / infinity / and / between /
次のようなことを行うことで、範囲に制限することもできます
^/s/(([^/]*)((/[^/]+){0,2}))$
これは次のようなものにのみ一致します
/s/foo/bar/baz
/s/foo/bar
/s/foo
だがしかし
/s/foo/bar/baz/pirate
/s
これは任意の数で機能するはずです
(r'(?<!^)/([^/]+)', ServiceHandler)
urlresolvers.py を調べたので、re.search の代わりに regex.findall を使用して urlresolvers.py に正しい動作をパッチすることはできますが、これは機能しないことがわかります。
次のようなものを試すことができます
(r'/s/([^/]*)/?([^/]*)/?([^/]*)', ServiceHandler)
ServiceHandler には常に 3 つのパラメーターを取得すると思いますが、使用されていないパラメーターは空の文字列になります。