正则表达式匹配字符串以?code =开头

时间:2014-06-24 23:15:12

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

我使用python和django来匹配我网站的网址。我需要匹配一个看起来像这样的网址: /公司/代码/?代码= 34k3593d39k

之后的部分?code =是字母和数字的任意组合,以及任何长度。

到目前为止我已尝试过这个:

r'^company/code/(.+)/$'
r'^company/code/(\w+)/$'
r'^company/code/(\D+)/$'
r'^company/code/(.*)/$'

但到目前为止,没有人能够抓住这个表达方式。有任何想法吗?感谢

2 个答案:

答案 0 :(得分:2)

code=34k3593d39kGET参数,您无需在网址格式中为其定义模式。您可以在视图下使用request.GET.get('code')访问它。模式应该只是:

r'^company/code/$'

用法,访问GET参数:

def my_view(request):
    code = request.GET.get('code')
    print code

检查documentation

  

URLconf搜索请求的URL,作为普通的Python   串。这不包括GET或POST参数或域   名。

答案 1 :(得分:1)

如果您将最后一个/移到^之后,第一个模式将有效:

>>> import re
>>> re.match(r'^/company/code/(.+)$', '/company/code/?code=34k3593d39k')
<_sre.SRE_Match object at 0x0209C4A0>
>>> re.match(r'^/company/code/(.+)$', '/company/code/?code=34k3593d39k').groups()
('?code=34k3593d39k',)
>>>

另请注意^是不必要的,因为re.match匹配字符串的开头:

>>> re.match(r'/company/code/(.+)$', '/company/code/?code=34k3593d39k').groups()
('?code=34k3593d39k',)
>>>