正则表达式匹配任何字符或没有?

use*_*419 3 python regex

我有以下两个字符串;

line1 = [16/Aug/2016:06:13:25 -0400] "GET /file/ HTTP/1.1" 302 random stuff ignore

line2 = [16/Aug/2016:06:13:25 -0400] "" 400 random stuff ignore
Run Code Online (Sandbox Code Playgroud)

我想抓住这两个部分;

"GET /file/ HTTP/1.1" 302
"" 400
Run Code Online (Sandbox Code Playgroud)

基本上两个"之间的任何字符"或"之间没有任何东西".到目前为止,我已经尝试过了;

regex_example = re.search("\".+?\" [0-9]{3}", line1)
print regex_example.group()
Run Code Online (Sandbox Code Playgroud)

这将与line1一起使用,但为line2提供错误.这是由于'.' 匹配任何字符,但如果不存在字符则给出错误.

有没有办法让它匹配两个""之间的任何字符或什么都没有?

4ca*_*tle 12

用.*?而不是.+?.

+ 表示"1或更多"

* 表示"0或更多"

Regex101演示

如果你想要一个更有效的正则表达式,使用一个否定的字符类[^"]而不是一个惰性量词?.您还应该使用原始字符串标志r和\d数字.

r'"[^"]*" \d{3}'
Run Code Online (Sandbox Code Playgroud)