所以我正在使用Django构建一个Web服务,但我在Urls中遇到了regexp的问题。
我想转到localhost / user / USERNAME / products /,其中用户名可以是任何字符,而不仅仅是\ w。我尝试使用它来捕获它:
('^user/(?P<username>.+)/$', 'user'),
('^user/(?P<username>.+)/products/$', 'get_products'),
但是它会捕获用户名“USERNAME / products”并将其发送给用户。我应该如何说除了零之外的任何长度的前斜线除外?
答案 0 :(得分:8)
使用[^/]+
代替.+
。
正如Chris Pratt在下面所说,.+?
也可以,因为它是一个“非捕获”正则表达式,它将匹配任何字符,直到匹配下面的子表达式。在可能的情况下,我通常更喜欢非捕获解决方案的正常急切解决方案,因为它们不会引入多个评估规则。