如何修改这个正则表达式以在 Django 中接受这个 URL?
Posted
技术标签:
【中文标题】如何修改这个正则表达式以在 Django 中接受这个 URL?【英文标题】:What to modify this regex to accept this URL in Django? 【发布时间】:2013-09-01 09:41:34 【问题描述】:我有一个这样的 Django URL:
url(r'^(?P<category_id>\w+)/beginner/$', views.beginner, name='beginner')
这个正则表达式接受这样的 URL:
http://127.0.0.1:8000/quiz/grammar/beginner/
http://127.0.0.1:8000/quiz/vocabulary/beginner/
但不接受带有'-'
的网址:
# This URL is not accepted
http://127.0.0.1:8000/quiz/business-english/beginner/
如何修改此正则表达式以接受带有'-'
的 URL
【问题讨论】:
也许 (.+) url(r'^(?P\w
匹配字母、数字和_
,而不是-
。
将\w
替换为[-\w]
:
url(r'^(?P<category_id>[-\w]+)/beginner/$', views.beginner, name='beginner')
【讨论】:
有url(r'^(?P<category_id>[-\w])/beginner/$', views.beginner, name='beginner')
但没有,我也没有找到http://127.0.0.1:8000/quiz/vocabulary/beginner/
的网址。
@user2032220,保留+
。【参考方案2】:
更好的是用[\w-]+
替换\w+
现在它将匹配单词和-
说:匹配单词\w
或-
1 次或多次
你的 Django 网址看起来像
url(r'^(?P<category_id>[\w-]+)/beginner/$', views.beginner, name='beginner')
【讨论】:
以上是关于如何修改这个正则表达式以在 Django 中接受这个 URL?的主要内容,如果未能解决你的问题,请参考以下文章
如何设置只接受 3 个特定单词的 Django URL 正则表达式?
修改正则表达式以在带有或不带有 http 前缀的字符串中查找 URL [重复]