首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使此regex URL模式在Django 2中工作

如何使此regex URL模式在Django 2中工作
EN

Stack Overflow用户
提问于 2018-06-29 20:31:16
回答 2查看 1.6K关注 0票数 4

我需要创建一个可以使用这个URL的URL模式:

代码语言:javascript
运行
复制
mysite.com/blog/12/بلاگ-مثال

它包含utf-8字符,所以我尝试使用\X

代码语言:javascript
运行
复制
re_path(r'^blog/?P<blog_id>[\d+]+/(?P<slug>[\X.*]+)/$', views.single_blog, name='single_blog')

但没起作用。我也不知道原因。也许只是因为我不擅长判断力。因此,我尝试了一种不同的模式,使用.*来接受任何东西:

代码语言:javascript
运行
复制
re_path(r'^blog/?P<blog_id>[\d+]+/(?P<slug>[.*]+)/$', views.single_blog, name='single_blog')

但这也不起作用,我得到:

当前的路径blog/12/بلاگ-مثال与其中任何一条都不匹配。

所以,正如我提到的,我不擅长正则表达式,有什么正确的方法来解决这个问题呢?

现在是说现在我有两个问题或regex是唯一方法的正确时机吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-29 20:39:53

您的匹配方法不起作用,因为\X不支持Python re[.*]+与1+点或星号匹配,但不匹配任何字符(因为将.*放入[...]字符类中,它们表示文字符号,而不是特殊字符)。

此外,[\d+]+也是一个字符类,匹配任何数字或+,1次或更多次,因此也存在一个问题。

您可以使用[^/]否定字符类来匹配除/以外的任何字符。

代码语言:javascript
运行
复制
r'^blog/(?P<blog_id>\d+)/(?P<slug>[^/]+)/?$'

详细信息

  • ^ -输入的开始
  • blog/ -一个文字子带
  • (?P<blog_id>\d+) -组"blog_id":1+数字
  • / -a /
  • (?P<slug>[^/]+) -组“段塞”:/以外的1+字符
  • /? -一个可选的/
  • $ -字符串的末端。

这里是regex演示 (注意,阿拉伯脚本中的字符在那里不起作用)。

票数 2
EN

Stack Overflow用户

发布于 2018-06-30 16:34:03

现在是时候说我有两个问题..。

事实上,你已经为这个任务选择了正确的工作。

另一个答案似乎是正确的,但不能容忍在里面加上波斯语。我发布这个答案是为了解释为什么您自己的regex不能像预期的那样工作。

  1. ?P<blog_id>[\d+]+

您可能在这里指的是一个命名组,与稍后在regex中使用的组相同。您忽略了开头和结尾括号:(?P<blog_id>[\d+]+)[\d+]也意味着一个由数字和+组成的字符类。您需要删除+(?P<blog_id>[0-9]+)

  1. (?P<slug>[\X.*]+)

结构是好的,它应该是,但字符类不是。\X在字符类中没有特殊的意义,更不用说它的re模块也不支持它了。.*也不例外。在字符类中,几乎所有特殊的标记都按字面处理。

因此,[\X.*]X.或星号*匹配。您需要将其更改为更一般的内容,如[^/]+,这意味着匹配到第一个斜杠(=匹配除正斜杠外的任何内容)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51109014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档