Python re的可选命名组

8 投票
3 回答
7313 浏览
提问于 2025-04-17 07:03

在Django的URL配置中,我需要一个可选的命名组。如果没有传递参数,这样的配置会引发404错误:

r'^list_cv/(?P<category>[\d]+)?/$'

怎么才能创建一个可选的命名组呢?

3 个回答

4

我发现,为没有命名组的 URL 创建一个单独的 URL 模式会更容易理解。

url(r'^list_cv/$', my_view),
url(r'^list_cv/(?P<category>[\d]+)/$', my_view),
4

最后的斜杠应该是可选正则表达式的一部分,正则表达式应该像这样:

r'^list_cv/(?:(?P<category>[\w+])?/)$'

不过我没有测试过这个。

9

对我来说是这样工作的:

r'^list_cv/(?:(?P<category>[\w+])/)?$'

编辑:

原始答案相比,主要的区别在于重复匹配的部分。

(?:(?P<category>[\w+])/)?$ 和原始的 (?:(?P<category>[\w+])?/)$

撰写回答