2014-09-26 72 views
0

這裏是urls.py正則表達式行爲怪異Django中的URL

url(r'^company_data/(?:[A-Za-z]+)/((?:0?[1-9]|[12][0-9]|3[01])(?:0?[1-9]|1[012])(?:20)?[0-9]{2})*/((?:0?[1-9]|[12][0-9]|3[01])(?:0?[1-9]|1[012])(?:20)?[0-9]{2})*$', 'stats.views.second', name='home'), 

我views.py

def second(request,comp_name,offset_min,offset_max=None): 

我以這種方式調用瀏覽器從/company_data/hello/24092014/25092014

期待正則表達式在下面的方式

comp_name= "hello", offset_min="24092014",offset_max="25092014" 

在現實中,它是

comp_name="24092014",offset_max="25092014" 

我做什麼錯在這裏? 在此先感謝! 輸入代碼在這裏

+0

它解決錯誤是(?:[A-ZA-Z] +)必須使用((?:[A-ZA-Z] +)) – 2014-09-26 19:18:20

+2

否:完全忽略?:因爲它明確表示一個非捕獲組。 – 2014-09-26 19:20:40

回答

0

你錯過了捕獲組1

編輯:還要注意的是2和3組應該像下面做,除非我讀你
錯了,你打算檢索特定號碼組的最後一部分。

# '^/?company_data/([A-Za-z]+)/((?:(?:0?[1-9]|[12][0-9]|3[01])(?:0?[1-9]|1[012])(?:20)?[0-9]{2})*)/((?:(?:0?[1-9]|[12][0-9]|3[01])(?:0?[1-9]|1[012])(?:20)?[0-9]{2})*)$' 


^ 
/? company_data/
([A-Za-z]+)         # (1) 
/
(            # (2 start) 
     (?: 

      (?: 0? [1-9] | [12] [0-9] | 3 [01]) 
      (?: 0? [1-9] | 1 [012]) 
      (?: 20)? 
      [0-9]{2} 
    )* 
)            # (2 end) 
/
(            # (3 start) 
     (?: 

      (?: 0? [1-9] | [12] [0-9] | 3 [01]) 
      (?: 0? [1-9] | 1 [012]) 
      (?: 20)? 
      [0-9]{2} 
    )* 
)            # (3 end) 
$ 

輸出:

** Grp 0 - (pos 0 , len 37) 
/company_data/hello/24092014/25092014 
** Grp 1 - (pos 14 , len 5) 
hello 
** Grp 2 - (pos 20 , len 8) 
24092014 
** Grp 3 - (pos 29 , len 8) 
25092014