我有一个包含数字主机数据和字母数字用户名数据的web日志文件。 以下是日志文件中的几行:
189.254.43.43 - swift6867 [21/Jun/2019:15:53:00 -0700] "GET /architectures/recontextualize/morph/scale HTTP/1.0" 204 8976
20.80.28.12 - hagenes4423 [21/Jun/2019:15:53:01 -0700] "POST /harness HTTP/1.1" 404 28127
112.211.50.38 - - [21/Jun/2019:15:53:03 -0700] "DELETE /harness/e-business/functionalities HTTP/1.1" 405 7975
有时,用户名会替换为连字符
我只想提取第一个方括号之前的数据,然后将其转换为字典列表。例如:
example_dict = {"host":"189.254.43.43",
"user_name":"swift6867"}
这是我使用的正则表达式:
pattern = """
(?P<host>[\d]*[.][\d]*[.][\d]*[.][\d]*) # host dictionary
(?P<username>([\w]+|-)(?=\ \[)) # username dictionary
"""
re.finditer(pattern,logdata,re.VERBOSE)
正则表达式找不到任何匹配项。只有单个正则表达式语句可以工作。我的意思是,如果我注释掉用户名字典的正则表达式,那么主机字典的正则表达式就可以工作,反之亦然
我做错了什么
您可以使用下一个正则表达式(demo):
要创建DICT列表,可以对^{} 返回的每个^{} 对象应用^{} :
这个正则表达式(demo)的步骤稍微少一点,所以对于较大的数据,它应该稍微快一点:
相关问题 更多 >
编程相关推荐