regex - 我如何使这个正则表达式 URL 模式在 Django 2 中工作

标签 regex django python-3.x url-pattern django-2.0

我需要制作一个可以与此 URL 一起使用的 URL 模式:

mysite.com/blog/12/بلاگ-مثال

它包含 utf-8 个字符,所以我尝试使用 \X :
re_path(r'^blog/?P<blog_id>[\d+]+/(?P<slug>[\X.*]+)/$', views.single_blog, name='single_blog')

但它没有用。我不知道为什么。也许只是因为我不擅长正则表达式。所以我只使用 .* 尝试了不同的模式接受任何事情:
re_path(r'^blog/?P<blog_id>[\d+]+/(?P<slug>[.*]+)/$', views.single_blog, name='single_blog')

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

The current path, blog/12/بلاگ-مثال, didn't match any of these.



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

是时候说 now I have two problems或正则表达式是唯一的方法?

最佳答案

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

此外,[\d+]+也是匹配任何数字或 + 的字符类,1次以上,所以也有问题。

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

r'^blog/(?P<blog_id>\d+)/(?P<slug>[^/]+)/?$'

详情
  • ^ - 开始输入
  • blog/ - 文字子字符串
  • (?P<blog_id>\d+) - 组“blog_id”:1+ 位数
  • / - 一个 /
  • (?P<slug>[^/]+) - 组“slug”:除 / 之外的 1+ 个字符
  • /? - 可选 /
  • $ - 字符串的结尾。

  • Here is a regex demo (注意突出显示阿拉伯文字中的字符在那里不起作用。)

    关于regex - 我如何使这个正则表达式 URL 模式在 Django 2 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51109014/

    相关文章:

    python re,多个匹配组

    java - 正则表达式 - 解析字符串

    regex - 如何从宏中提取唯一字符串?

    python - 从 python 中的字符串中删除有源数字

    python - 为什么 Django 看不到我的静态文件?

    python - 在 Django 中优化 Postgresql 数据库写入的性能?

    regex - 没有竖线 (|) 字符的字符串的正则表达式是什么?

    django - docker-compose在require.txt更改时重置Django数据库

    python-3.x - 打印 ASCII 艺术彼此相邻

    python - 我如何安装cython