我想在课文中理解一下协议。如果我这样做:
>>> d = re.search(re.compile(r".*(?P<protocol>(http\/\d\.\d)?) (?P<statuscode>\d{3})"), 'khkhjkhkhkh HTTP/1.1 303')
>>> d.groupdict()["protocol"]
结果将为空,因为如果删除“?”,to将协议与.*匹配对于协议,它在这种情况下运行良好,但在缺少协议的情况下不起作用,例如“khjkhkhhhh303”。我知道正则表达式与协议匹配而不是与协议匹配是令人困惑的,但是有什么方法可以解决这个问题吗?你知道吗
由于协议模式是可选的,因此第一个
.*
将尽可能匹配(贪婪)到强制状态码模式。根据注释,您需要非贪婪变量:.*?
。你知道吗您还需要匹配不区分大小写,因为您的模式有
http
,但搜索字符串有HTTP
。你知道吗一起:
(无需跳过正斜杠。)
相关问题 更多 >
编程相关推荐