正则表达式在django urls中表现得很奇怪

时间:2014-09-26 18:56:12

标签: regex django python-2.7

这是urls.py中的正则表达式

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'),

my 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"

我在这做错了什么? 提前致谢!!     在这里输入代码

1 个答案:

答案 0 :(得分: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  
相关问题