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

olo*_*fom 3 python regex django django-urls

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

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

('^user/(?P<username>.+)/$', 'user'),
('^user/(?P<username>.+)/products/$', 'get_products'),
Run Code Online (Sandbox Code Playgroud)

但它会捕获用户名"USERNAME/products"并将其发送给用户.我应该怎么说除了零之外的任何长度的前斜线除外?

Mar*_*cin 8

[^/]+而不是.+.

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