python重新匹配字符串末尾的"空格"

时间:2015-06-15 23:06:06

标签: python regex

MOOC讲师给出的原始表达是

^(\S+) (\S+) (\S+) \[([\w:/]+\s[+\-]\d{4})\] "(\S+) (\S+)\s*(\S*)" (\d{3}) (\S+)

我认为这里的问题是在HTTP / 1.0的末尾有一个额外的空间用于坏的,任何人都可以暗示做一个小的改动,使其成功解析 BOTH ? 我试图将(\ S *)更改为(?:\ s + | $)或(\ S. *),但它无论如何都无效。

以下好的
127.0.0.1 - - [01/Aug/1995:00:00:01 -0400] "GET /images/launch-logo.gif HTTP/1.0" 200 1839

下面的错误
Invalid logline: ix-li1-14.ix.netcom.com - - [08/Aug/1995:14:47:41 -0400] "GET /shuttle/missions/sts-70/mission-sts-70.html HTTP/1.0 " 200 20304

1 个答案:

答案 0 :(得分:1)

直接接近

^(\S+) (\S+) (\S+) \[([\w:/]+\s[+\-]\d{4})\] "(\S+) (\S+)\s*(\S*)\s?" (\d{3}) (\S+)

在第二个\s?之前注意"

这两者都匹配

127.0.0.1 - - [01/Aug/1995:00:00:01 -0400] "GET /images/launch-logo.gif HTTP/1.0" 200 1839

ix-li1-14.ix.netcom.com - - [08/Aug/1995:14:47:41 -0400] "GET /shuttle/missions/sts-70/mission-sts-70.html HTTP/1.0 " 200 20304