Чтобы сопоставить текст в квадратных скобках, который не может содержать [
и ]
внутри него, но должен содержать какой-либо другой текст, может быть сопоставлен с [^][]
классом символов с отрицанием.
То есть выможет сопоставить весь текст в квадратных скобках с \[[^][]*]
, и если вам нужно сопоставить некоторый текст внутри, вам нужно поместить этот текст после [^][]*
, а затем добавить еще одно вхождение [^][]*
перед закрывающим ]
.
Вы можете использовать
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"...}}']