.*)$' ,但它不起作用。然'/> .*)$' ,但它不起作用。然'/> 带有问号文字的Python正则表达式 | 所有编程讨论 | zhouni.net

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


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

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


2724
2017-10-07 07:31


起源



答案:


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

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

因此,URL的匹配部分仅限于第一个'aaa'。剩下的'?aaa'是新的 请求参数 由'?'分隔mark,包含作为GET参数传递的变量“aaa”。

你是什​​么 能够 这里做的是在变量进入URL之前对变量进行编码。编码形式 ? 是 %3F


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


13
2017-10-07 07:36





你不被允许使用 ? 在URL中作为变量值。该 ? 表示有变量进来。

喜欢: http://www.example.com?variable=1&another_variable=2

更换或逃脱它。这里有点不错 文件


2
2017-10-07 07:36





Django的 urls.py 不解析查询字符串,因此无法获取此信息 urls.py 文件。

而是在您的视图中解析它:

def foo(request):
   code = request.GET.get('code')
   if code:
      # do stuff
   else:
      # No code!

1
2017-10-07 07:46





“如何匹配'?',这是特别的吗?” 是的,但您可以使用反斜杠正确地转义它。但是,我没有看到你在哪里占据了领先的正斜线。这个位只需要添加:

r'^/\?code=(?P<code>.*)$'

0
2017-10-07 07:37





压制正则表达式元字符 []

>>> s
'/?code=authenticationcode'
>>> r=re.compile(r'^/[?]code=(.+)')
>>> m=r.match(s)
>>> m.groups()
('authenticationcode',)

0
2017-10-07 07:39



当他决定以这种方式“压制”元字符时会发生什么: [^?$]?逃避将是更好的方法。 - Kenneth K.


答案:


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

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

因此,URL的匹配部分仅限于第一个'aaa'。剩下的'?aaa'是新的 请求参数 由'?'分隔mark,包含作为GET参数传递的变量“aaa”。

你是什​​么 能够 这里做的是在变量进入URL之前对变量进行编码。编码形式 ? 是 %3F


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


13
2017-10-07 07:36





你不被允许使用 ? 在URL中作为变量值。该 ? 表示有变量进来。

喜欢: http://www.example.com?variable=1&another_variable=2

更换或逃脱它。这里有点不错 文件


2
2017-10-07 07:36





Django的 urls.py 不解析查询字符串,因此无法获取此信息 urls.py 文件。

而是在您的视图中解析它:

def foo(request):
   code = request.GET.get('code')
   if code:
      # do stuff
   else:
      # No code!

1
2017-10-07 07:46





“如何匹配'?',这是特别的吗?” 是的,但您可以使用反斜杠正确地转义它。但是,我没有看到你在哪里占据了领先的正斜线。这个位只需要添加:

r'^/\?code=(?P<code>.*)$'

0
2017-10-07 07:37





压制正则表达式元字符 []

>>> s
'/?code=authenticationcode'
>>> r=re.compile(r'^/[?]code=(.+)')
>>> m=r.match(s)
>>> m.groups()
('authenticationcode',)

0
2017-10-07 07:39



当他决定以这种方式“压制”元字符时会发生什么: [^?$]?逃避将是更好的方法。 - Kenneth K.