一尘不染

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

django

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

然后我发现这是“?”的问题。
因为我尝试/aaa?aaa使用r'aaa\?aaa' r'aaa\\?aaa'even 进行匹配r'aaa.*aaa',但都失败了,但是当它是“ +”或任何其他字符时,它可以工作。
如何匹配“?”,有什么特别之处吗?


阅读 468

收藏
2020-04-03

共1个答案

一尘不染

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

/aaa?aaa你的网址内部不匹配的原因是因为?开始新的GET查询。

因此,URL的可匹配部分只能达到第一个“ aaa”。其余的“?aaa”是一个新的查询字符串,由“?”分隔 标记,其中包含作为“ GET”参数传递的变量“ aaa”。

你可以在此处对变量进行编码,然后再将其放入URL。的编码形式?为%3F。

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

2020-04-03