带有问号文字的Python正则表达式

Plu*_*oTX 11 python regex django

我正在使用Django的URLconf,我将收到的URL是/?code=authenticationcode
我想匹配使用的URL r'^\?code=(?P<code>.*)$',但它不起作用.

然后我发现它是'?'的问题.
因为我尝试/aaa?aaa使用r'aaa\?aaa' r'aaa\\?aaa'偶数匹配r'aaa.*aaa',都失败了,但是当它是"+"或任何其他角色时它会起作用.
如何匹配'?',这是特别的吗?

Anu*_*pta 14

>>> s="aaa?aaa"
>>> import re
>>> re.findall(r'aaa\?aaa', s)
['aaa?aaa']
Run Code Online (Sandbox Code Playgroud)

原因/aaa?aaa在您的URL内部不匹配是因为a ?开始新的GET查询.

因此,URL的匹配部分仅限于第一个'aaa'.剩下的'?aaa'是一个由'?'分隔的新查询字符串 mark,包含作为GET参数传递的变量"aaa".

可以做的是在变量进入URL之前对变量进行编码.编码形式?%3F.


您也应该不匹配GET查询,例如/?code=authenticationcode使用正则表达式.相反,请将您的网址与/使用相匹配r'^$'.Django会将变量code作为GET参数传递给request对象,您可以在视图中使用它获取request.GET.get('code').