在Django中停止捕获基于/ for urls的任何字符串(正则表达式)

时间:2012-03-19 15:49:37

标签: python regex django django-urls

所以我正在使用Django构建一个Web服务,但我在Urls中遇到了regexp的问题。

我想转到localhost / user / USERNAME / products /,其中用户名可以是任何字符,而不仅仅是\ w。我尝试使用它来捕获它:

('^user/(?P<username>.+)/$', 'user'),
('^user/(?P<username>.+)/products/$', 'get_products'),

但是它会捕获用户名“USERNAME / products”并将其发送给用户。我应该如何说除了零之外的任何长度的前斜线除外?

1 个答案:

答案 0 :(得分:8)

使用[^/]+代替.+

正如Chris Pratt在下面所说,.+?也可以,因为它是一个“非捕获”正则表达式,它将匹配任何字符,直到匹配下面的子表达式。在可能的情况下,我通常更喜欢非捕获解决方案的正常急切解决方案,因为它们不会引入多个评估规则。