为什么这个正则表达式代码不起作用

时间:2017-10-20 14:22:16

标签: python regex django django-views django-urls

使用Django应用程序

这是我的urls.py

urlpattterns = [url(r'^(?P<leagueId>[0-9]+)/(?P<year>[0-9]+)/(?P<team>[\S]+)/$', views.team_detail, name="team_detail"),]

示例网址将是:

http://localhost:8000/123456/2017/Johnny%20Rocket/

我试过玩Pythex,但我无法得到匹配的网址

注意:传递的变量是/ {number} / {year} / {name}

名称可以包含字母数字字符和空格。

2 个答案:

答案 0 :(得分:3)

字符类\S匹配除空白之外的任何内容,%20在与正则表达式匹配之前被解码为空格。

要匹配字母数字字符和空格,您可以使用[\w\s]

答案 1 :(得分:0)

我会使用以下正则表达式:

r"(?P<leagueId>\d+)/(?P<year>\d+)/(?P<team>[^/]+)/$"

一些小改动:

  • 取出^表示行开头
  • 将[0-9]更改为\ d

但最重要的是节。我喜欢使用负面字符类。你基本上想要匹配下一个

的所有内容
/

这就是

[^/]+

会为你做的。

您可能希望将年份限制为以下范围:

\d{2,4}