停止基于 / 为 Django 中的 url 捕获任何字符串(正则表达式)
Posted
技术标签:
【中文标题】停止基于 / 为 Django 中的 url 捕获任何字符串(正则表达式)【英文标题】:Stop capturing any string based on / for urls in Django (regex) 【发布时间】:2012-04-04 03:01:33 【问题描述】:所以我正在使用 Django 构建一个 web 服务,但是我在 Urls 中遇到了正则表达式的问题。
我想转到 localhost/user/USERNAME/products/,其中用户名可以是任何字符,而不仅仅是 \w。我试着用这个来捕捉它:
('^user/(?P<username>.+)/$', 'user'),
('^user/(?P<username>.+)/products/$', 'get_products'),
但 ofc 它会捕获用户名“USERNAME/products”并将其发送给用户。除了零以外的任何长度的任何长度的正斜杠除外,我应该怎么说每个可能的字符?
【问题讨论】:
【参考方案1】:使用[^/]+
代替.+
。
正如 Chris Pratt 在下面指出的,.+?
也可以工作,因为它是一个“非捕获”正则表达式,它将匹配任何字符,直到匹配以下子表达式。在可能的情况下,我通常更喜欢普通的急切解决方案而不是非捕获解决方案,因为它们不会引入多个评估规则。
【讨论】:
谢谢,只针对第一个,指向“用户”还是两个?.+?
也可以。它将捕获到下一次出现的/
。
@ChrisPratt 是的,虽然我认为这更简单。以上是关于停止基于 / 为 Django 中的 url 捕获任何字符串(正则表达式)的主要内容,如果未能解决你的问题,请参考以下文章
Django urls.py 在 WampServer 上捕获所有现有 HTML 项目的 url