正则表达式不适用于String的最后几个字母

时间:2017-10-23 22:57:36

标签: python regex python-3.x

这就是我的标题看起来像

header = "GET method P2P-DI/1.0\n" +"Host: "+ host+ "\nOS: " + OS + "\nStatus: 404"

我成功地通过这样做得到了方法:

method = re.search('GET (.*?) P2P-DI/1\.0.*',header).group(1)

我正在尝试检索状态代码'404'。返回无没有组错误

status = re.search('GET .*Status: ([0-9][0-9][0-9]?)',header).group(1)

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

import re
status = re.findall('Status: (.*?)$', header)[0]

答案 1 :(得分:0)

来自documentation

  

本节中的最终元字符是'.'
  它匹配除换行符之外的任何内容,并且还有一个备用模式(re.DOTALL),它甚至可以匹配换行符。

因此,您只需在参数中指定re.DOTALL即可修复代码:

status = re.search('GET .*Status: ([0-9][0-9][0-9]?)', header, re.DOTALL).group(1)
print(status) # 404

作为匹配任何字符的替代方法,您可以使用以下任何结构:

[\d\D] # that means 'digit char' or 'non-digit char' => 'any char'
[\w\W] # ...
[\s\S]

对于你的例子,它可能是:
(请注意,[0-9]相当于\d

status = re.search('GET [\s\S]*Status: (\d\d\d?)', header).group(1)

此外,对于问题中给出的实例,仅使用:

就足够了
status = re.search('Status: (\d+)', header).group(1)