首页 > 解决方案 > 正则表达式从日志文件中查找组和匹配项

问题描述

我有一个包含很多行的日志文件。例子:

219.133.7.154 - price5585 [21/Jun/2019:15:45:53 -0700] "GET /incubate/incubate HTTP/1.1" 201 12126

我需要这样的输出:

{host: 219.133.7.154, user: price5585, date: 21/Jun/2019:15:45:53 -0700, req: GET /incubate/incubate HTTP/1.1}

我真的很挣扎,只有两件第一件事起作用。这是我的代码:

pattern = """
(?P<host>.*) #Host name
(-\ ) 
(?P<username>\w*)  #username

(?P<time>\w*) #Time

"""

模式应该是什么样子,这样我就可以提取我需要的一切?

标签: pythonregex

解决方案


你必须使用正则表达式吗?因为您的目标可以通过解析由空格分隔的字段轻松实现:

#!/usr/bin/env python3

LINE = "219.133.7.154 - price5585 [21/Jun/2019:15:45:53 -0700] \"GET /incubate/incubate HTTP/1.1\" 201 12126"

body = LINE.split("\"")[1]
split_line = LINE.split(" ")

output_dict = {"host": split_line[0],
               "user": split_line[2],
               "date": " ".join([split_line[3], split_line[4]]),
               "req": body}
print(output_dict)

输出:

{'host': '219.133.7.154', 'user': 'price5585', 'date': '[21/Jun/2019:15:45:53 -0700]', 'req': 'GET /incubate/incubate HTTP/1.1'}

推荐阅读