2017-10-20 132 views
1

在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}

該名稱可以由字母數字字符和空格組成。

+1

但'%20'是空白的編碼...使用'+'代替。 –

+0

我想大量的流量來自[django]以外的標籤。 Django會在字符串匹配正則表達式之前提取URL路徑並剪切第一個斜槓。 – knbk

回答

3

字符類\S匹配除空白之外的任何內容,並且%20在與正則表達式匹配之前被解碼爲空格。

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

+0

謝謝!這工作! –

0

我會使用正則表達式如下:

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

一些小的改動:

  • 拿出^這意味着行首
  • 改變[0-9]到\ d

但是大部分是該部分。我喜歡使用負面的字符類。你基本上要一切匹配下一

/ 

而這正是

[^/]+ 

會爲你做。

您可能要一年來限制像一個範圍:

\d{2,4} 
+0

謝謝,這也工作了! –

+0

在Django的上下文中,向起始處添加斜槓實際上是不正確的。路徑被提取,解碼,並且在字符串與正則表達式匹配之前,第一個斜槓被切斷。 – knbk

+0

酷!很高興知道,我不知道Django – sniperd

相關問題