我在python中使用re.findall来匹配日志文件的每一行,并从该行中提取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对象?
答案 0 :(得分:1)
尝试使用此正则表达式:
r"({.*?})"
这应该包含&#34; {...}&#34; s
中的所有内容log_line = 'sdgfjk fgkglhdfg <-- fdfsd dsdasds {"jsondata": "1.0", "result": null, "id": 0} dasdsad khfsldfg'
print(re.findall(r"({.*?})", log_line))
这是我的输出:
['{"jsondata": "1.0", "result": null, "id": 0}']