主标题的Python正则表达式

时间:2015-02-18 19:19:33

标签: python regex

鉴于此字符串:

GET /dsadda HTTP/1.1\r\nUser-Agent: curl/7.26.0\r\nHost: www.youtube.com\r\nAccept: */*\r\n\r\n

如何在Host:\r\n之间的Python正则表达式组中获取所有内容?

在此示例中,我希望re.match.group(1)返回www.youtube.com

2 个答案:

答案 0 :(得分:5)

您可以使用此正则表达式匹配

>>> a = 'GET /dsadda HTTP/1.1\r\nUser-Agent: curl/7.26.0\r\nHost: www.youtube.com\r\nAccept: */*\r\n\r\n'
>>> import re
>>> re.search(r"Host: (.+)\r\n",a).group(1)
'www.youtube.com'

小注释 - 最好使用re.MULTILINE标志作为输入字符串包含\n,尽管在这种特殊情况下不需要它。 另外,正如Antti Haapala所提到的,使用^来匹配字符串的开头也是一个更好的选择,因为可能有名为{{1}的标题字段}。因此,最终的正则表达式将类似于Host

答案 1 :(得分:1)

使用积极的外观和积极向前看

>>> import re
>>> a = 'GET /dsadda HTTP/1.1\r\nUser-Agent: curl/7.26.0\r\nHost: www.youtube.com\r\nAccept: */*\r\n\r\n' 
>>> re.search(r"(?<=Host: )(\S+)(?=\r\n)", a).group(1)
'www.youtube.com'