日志文件:
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"...}}
要匹配在方括号内的文字不能有[
和]
它里面,而应该包含一些其他的文本可以与匹配[^][]
否定字符类。
也就是说,您可以将整个文本放在方括号内\[[^][]*]
,并且如果需要在其中匹配某些文本,则需要将该文本放在结束符之后[^][]*
,然后附加另一个出现[^][]*
在结束符之前]
。
您可以使用
re.findall(r'\[([^][]*"key"[^][]*)]', text_file.read())
参见Python演示:
import re
s = '''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"...}}]'''
print(re.findall(r'\[([^][]*"key"[^][]*)]', s))
输出:
['"key",{"data":{"tag1":12,"tag2":13,"tag3": 14"...}}']
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句