从文本文件Python中提取括号之间的文本

spinState010

日志文件:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章