我有一个('被盗的' :) Python代码,它使用正则表达式来解析所有HTTP标头。
就像这样:
parser = re.compile(r'\s*(?P<key>.+\S)\s*:\s+(?P<value>.+\S)\s*')
header_list = [(key, value) for key, value in parser.findall(http_headers)]
通常这很好用,但找不到以下标题:
Access-Control-Allow-Origin: *
我认为这可能与星号有关,但我不确定。 我认为正则表达式部分:
P<value>.+\S
用于匹配和分组。任何字符+一次或多次后跟\ S任何非空格。不是星号的一部分吗?
有什么想法吗?
答案 0 :(得分:2)
这里的问题其实很简单。最终.+
期望任何字符,然后是\S
另一个字符。 tl; dr:它只匹配正则表达式后的2个或更多字符。
使用*
代替0个或更多字符(加上\S
):
\s*(?P<key>.+\S)\s*:\s+(?P<value>.*\S)\s*
# ^ * instead of +