Tornado URL 正则表达式:特定单词存在于关键字参数中

Joo*_*wan 2 python regex tornado

尝试使用这样的 URL:

r"/person/(?P<name>[\w-]+)/?**town**?/?$" (currently wrong)
Run Code Online (Sandbox Code Playgroud)

我希望能够检查用户是否在名称后的端点中提供了“城镇”。如何使用 kwarg 将此信息传递给请求处理程序(仅当其拼写正确时)?

提前致谢。

Ben*_*ell 5

Tornado 允许多个规则指定相同的处理程序类;这通常比尝试使用可选部分构建复杂的正则表达式更简单(尤其是当您还想让尾部斜杠可选时):

(r"/person/(?P<name>[\w-]+)/(?P<town>[\w-]+)/?", MyHandler),
(r"/person/(?P<name>[\w-]+)/?", MyHandler),
Run Code Online (Sandbox Code Playgroud)

我认为组合的正则表达式看起来像这样。请注意使用非捕获组(?: )使/town部分可选(但如果存在,则分隔名称和城镇的斜线也必须存在):

(r"/person/(?P<name>[\w-]+)(?:/(?P<town>[\w-]+))?/?", MyHandler),
Run Code Online (Sandbox Code Playgroud)