从文本文件中提取括号之间出现的文本 Python
Extract occurrence of text between brackets from a text file Python
日志文件:
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"...}}
要匹配方括号内不能有 [
和 ]
但应该包含一些其他文本的文本可以与 [^][]
否定字符匹配 class.
也就是你可以用\[[^][]*]
来匹配方括号内的整个文本,如果你需要匹配里面的一些文本,你需要将该文本放在[^][]*
之后,然后再追加[^][]*
在收盘前出现 ]
.
您可以使用
re.findall(r'\[([^][]*"key"[^][]*)]', text_file.read())
查看 Python demo:
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"...}}']
日志文件:
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"...}}
要匹配方括号内不能有 [
和 ]
但应该包含一些其他文本的文本可以与 [^][]
否定字符匹配 class.
也就是你可以用\[[^][]*]
来匹配方括号内的整个文本,如果你需要匹配里面的一些文本,你需要将该文本放在[^][]*
之后,然后再追加[^][]*
在收盘前出现 ]
.
您可以使用
re.findall(r'\[([^][]*"key"[^][]*)]', text_file.read())
查看 Python demo:
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"...}}']