python的正则表达式

python的正则表达式,python,regex,Python,Regex,我在用python编写正则表达式时遇到了困难。 例如,我得到了下面的正确答案 "GET /images/launch-logo.gif HTTP/1.0" 220 1839 相配 "(\S+) (\S+)\s*(\S*)" (\d{3}) (\S+) 但是,我仍然需要包括以下所有案例 “GET/history/history.html hqpao/hqpao_home.html HTTP/1.0“200 1502 “GET/shuttle/missions/missions.html shu

我在用python编写正则表达式时遇到了困难。 例如,我得到了下面的正确答案

"GET /images/launch-logo.gif HTTP/1.0" 220 1839
相配

"(\S+) (\S+)\s*(\S*)" (\d{3}) (\S+)
但是,我仍然需要包括以下所有案例

  • “GET/history/history.html hqpao/hqpao_home.html
    HTTP/1.0“200 1502
  • “GET/shuttle/missions/missions.html shuttle从
    肯尼迪航天中心HTTP/1.0“200 8677
  • “GET/finger@net.com HTTP/1.0”404-
  • 显然,我应该更改表达式的粗体部分

    "(\S+) (\S+)\s*(\S*)" (\d{3}) (\S+) 其中,第2、3、4个表达式是我需要处理的(1)、(2)、(3)个额外情况


    但是我的表达不起作用。当我只是逐案处理正则表达式时,我对它有什么误解。

    这可能有点混乱,但它可以工作:

    \"(\S+) (\S+[\s\w\.\@]*)\s*(\S*)\"\s?(\d{3})\s(\S+)*
    
    你可以在Regexr上玩它

    您可以使用

    ^"([^\s"]+)\s+([^\s"]+)(?:\s+([^"]+?))?\s+([A-Z]+/\d[\d.]*)"\s*(\d{3})\s*(\S+)$
    

    详细信息

    • ^
      -行的开头(如果要将整个文件读入变量,请使用
      re.M
      f.read()
    • -双引号
    • ([^\s“]+)
      -第1组:除空格和双引号外的一个或多个字符
    • \s+
      -1+空格
    • ([^\s“]+)
      -第2组:除空格和双引号外的一个或多个字符
    • (?:\s+([^“]+?)?
      -可选的非捕获组匹配
      • \s+
        -1+空格
      • ([^“]+?)
        -第3组:除
        以外的任何1个或多个字符,尽可能少
    • \s+
      -1+空格
    • ([A-Z]+/\d[\d.]*)
      -第4组:1+大写字母,
      /
      ,然后是1位数字,后跟任何0+数字或
      字符
    • -双引号
    • \s+
      -0+空格
    • (\d{3})
      -第5组:三位数字
    • \s*
      -0+空格
    • (\S+)
      -1个或多个非空白字符
    • $
      -字符串结束

    开头的
    (1)
    (2)
    (3)
    是您想要匹配的部分,还是要匹配的字符串的编号列表?我的正则表达式必须包括所有(1)、(2)、(3)和最开始的casesy,但在(1)case
    (1)中要匹配的实际字符串是什么GET/history/history.html hqpao/hqpao_home.html HTTP/1.0“200 1502
    ,或者它只是
    “GET/history/history.html hqpao/hqpao_home.html HTTP/1.0”200 1502
    ,而(1)只是在您的帖子中对其进行编号?哦!它只是用于编号,不包含在要求中
    ^"([^\s"]+)\s+([^\s"]+)(?:\s+([^"]+?))?\s+([A-Z]+/\d[\d.]*)"\s*(\d{3})\s*(\S+)$