【发布时间】:2019-02-26 02:33:22
【问题描述】:
日志文件:
INFO:werkzeug:127.0.0.1 - - [20/Sep/2018 19:40:00] "GET /socket.io/?polling HTTP/1.1" 200 -
INFO:engineio: Received packet MESSAGE, ["key",{"data":{"tag1":12,"tag2":13,"tag3": 14"...}}]
我有兴趣仅从包含关键字 "key" 的括号中提取文本,而不是从下面提取与正则表达式模式匹配的所有匹配项。
这是我迄今为止尝试过的:
import re
with open('logfile.log', 'r') as text_file:
matches = re.findall(r'\[([^\]]+)', text_file.read())
with open('output.txt', 'w') as out:
out.write('\n'.join(matches))
这会输出与正则表达式匹配的所有匹配项。 output.txt 的所需输出如下所示:
"key",{"data":{"tag1":12,"tag2":13,"tag3": 14"...}}
【问题讨论】:
-
您要提取的所有消息是否都包含"key",或者这只是一个示例?输出可以假设多少结构?
-
是的,所需的提取消息将包含相同的关键字“key”。至于输出结构,它应该包含上面示例日志文件 sn-p 中方括号内的所有文本。
-
如果
"key"可以出现在方括号内的任何位置,请尝试print(re.findall(r'\[([^][]*"key"[^][]*)]', text_file.read()))。 -
然后您可以制作您正在寻找的正则表达式的那一部分:
re.findall(r'\["key"([^\]]+)', text_file.read())。这就是你要找的吗? -
@JohanL 我试过了,它似乎没有用,尽管它的方向是正确的。感谢您的回复!
标签: python regex logfile-analysis