为了账号安全,请及时绑定邮箱和手机立即绑定

python的正则表达式

python的正则表达式

杨魅力 2021-08-14 17:50:08
在 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 Launches from Kennedy Space Center HTTP/1.0"200 8677"GET /finger @net.com HTTP/1.0"404 -显然我应该改变表达式的粗体部分"(\S+) (\S+) \s* (\S*)" (\d{3}) (\S+)但是我该怎么改。我想到了一种方法,将粗体部分更改为[\s |(\s*)(\S+) |(\S+)(12) |(\S+)]其中 2nd, 3rd , 4th 表达式是我需要处理的 (1), (2), (3) 额外情况。但我的表达不起作用。我对正则表达式有什么误解,因为我只是逐个处理它。
查看完整描述

2 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

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

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

你可以在 Regexr 上玩它。正则表达式共享链接


查看完整回答
反对 回复 2021-08-14
?
jeck猫

TA贡献1909条经验 获得超7个赞

您可以使用

^"([^\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 个或多个非空白字符

  • $ - 字符串的结尾。


查看完整回答
反对 回复 2021-08-14
  • 2 回答
  • 0 关注
  • 195 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信