首页 > 解决方案 > python的正则表达式

问题描述

在python中编写正则表达式时我很挣扎。例如我得到以下权利

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

被匹配

"(\S+) (\S+)\s*(\S*)" (\d{3}) (\S+)

但是我仍然需要将以下案例全部包含在内

  1. "GET /history/history.html hqpao/hqpao_home.html HTTP/1.0" 200 1502
  2. "GET /shuttle/missions/missions.html Shuttle Launches from Kennedy Space Center HTTP/1.0"200 8677
  3. "GET /finger @net.com HTTP/1.0"404 -

显然我应该改变表达式的粗体部分

"(\S+) (\S+) \s* (\S*)" (\d{3}) (\S+)

但是我应该如何改变它。我想到了一种方法,将粗体部分更改为

[\s |(\s*)(\S+) |(\S+)(12) |(\S+)]

其中第 2、3、4 个表达式是我需要处理的 (1)、(2)、(3) 额外情况。

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

标签: pythonregex

解决方案


这可能有点混乱,但它有效:

\"(\S+) (\S+[\s\w\.\@]*)\s*(\S*)\"\s?(\d{3})\s(\S+)*

您可以在 Regexr 上使用它。正则表达式共享链接


推荐阅读