Python regex with question mark literal

前端 未结 5 1253
耶瑟儿~
耶瑟儿~ 2020-12-06 17:30

I\'m using Django\'s URLconf, the URL I will receive is /?code=authenticationcode
I want to match the URL using r\'^\\?code=(?P.*)$\'

5条回答
  •  温柔的废话
    2020-12-06 17:54

    >>> s="aaa?aaa"
    >>> import re
    >>> re.findall(r'aaa\?aaa', s)
    ['aaa?aaa']
    

    The reason /aaa?aaa won't match inside your URL is because a ? begins a new GET query.

    So, the matchable part of the URL is only up to the first 'aaa'. The remaining '?aaa' is a new query string separated by the '?' mark, containing a variable "aaa" being passed as a GET parameter.

    What you can do here is encode the variable before it makes its way into the URL. The encoded form of ? is %3F.


    You should also not match a GET query such as /?code=authenticationcode using regex at all. Instead, match your URL up to / using r'^$'. Django will pass the variable code as a GET parameter to the request object, which you can obtain in your view using request.GET.get('code').

提交回复
热议问题