3

日志文件:

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"...}}
4

1 回答 1

2

要匹配方括号内不能有[]在其中但应该包含一些其他文本的文本,可以与[^][]否定字符类匹配。

也就是说,您可以将方括号内的整个文本与\[[^][]*]匹配,如果您需要匹配其中的某些文本,则需要将该文本放在之后,然后在结束之前[^][]*附加另一个出现的。[^][]*]

您可以使用

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"...}}']
于 2018-09-21T17:02:05.423 回答