Я использую re.findall в python для соответствия каждой строке файла журнала и извлечения данных json из этой строки. Вот пример строки:Регулярное выражение соответствует только совпадению, а не группе
<134>1 2017-01-23T10:54:47.111-01:11 bla blabla - - <-- '{"jsondata": "1.0", "result": null, "id": 0}'
И код, я использую на нем:
for line in jsonlog:
json_marker = "<-- '{"
if json_marker in line:
#Extract whats between the single quotes on lines where a json is present
x = re.findall(r"(\'\{(.*?)\}\')", line)
Это возвращает это (да есть два):
[('\'{"jsondata": "1.0", "result": null, "id": 0}\'', '"jsondata": "1.0", "result": null, "id": 0')]
Но мне нужно он возвращает только данные json из этой строки в формате json:
{"jsonrpc": "2.0", "result": null, "id": 2530}
Когда я положил регулярное выражение в regex101,
\'\{(.*?)\}\'
я получаю матч группы для
"jsondata": "1.0", "result": null, "id": 0
и полный матч
'{"jsondata": "1.0", "result": null, "id": 0}'
Так что это говорит мне FindAll возвращается в группу. Как я могу исправить это, чтобы вернуть полное совпадение, объект json?
Этот работал красиво. Я могу получить доступ к данным json, просто обратившись к элементу списка. Спасибо! –