RegEx和Django URL表达式

时间:2011-03-29 06:09:51

标签: regex django

这不应该接受两种不同的模式,例如/hello//hello/123/吗?第一个似乎是一个全能的。

(r'^(?P<org>\S+)/$', 'path.to.view'),
(r'^(?P<org>\S+)/(?P<id>\d{3})/$', 'path.to.view'),

我真正想要找到的是一个slu and和一些不同的长度(虽然它上面只显示三个字符):/hello-slug-name/123/或只是/hello-slug-name/

编辑:

为了后人的一个注释:在下面的两个答案中,两者都非常有助于理解这里发生的事情。我正在将我最终用于实现的答案作为“正确”使用绿色勾号,但两者都非常有见地和有帮助。

2 个答案:

答案 0 :(得分:3)

第一个正则表达式匹配任何由非空白字符组成的字符串,并以斜杠结尾。因此它匹配您的字符串。

第二个正则表达式匹配一个字符串,该字符串由非空白字符组成,后跟斜杠,后跟三个数字,后跟另一个斜杠。

从你的例子中我收集的是“变长的数量”,你的意思是“可能为零(在这种情况下斜线也会掉落)”。一个涵盖所有这些案例的正则表达式将是

^(?P<org>\S+?)/(?:(?P<id>\d+)/)?$

答案 1 :(得分:2)

尝试使用:

(r'^(?P<org>[-A-Za-z0-9_]+)/$', 'path.to.view'),
(r'^(?P<org>[-A-Za-z0-9_]+)/(?P<id>\d+)/$', 'path.to.view'),