正则表达式找不到http标头

时间:2015-02-20 00:48:13

标签: python regex http-headers

我有一个('被盗的' :) 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任何非空格。不是星号的一部分吗?

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

这里的问题其实很简单。最终.+期望任何字符,然后是\S另一个字符。 tl; dr:它只匹配正则表达式后的2个或更多字符。

使用*代替0个或更多字符(加上\S):

\s*(?P<key>.+\S)\s*:\s+(?P<value>.*\S)\s*
#                                 ^ * instead of +