正则表达式只匹配完全匹配而不匹配
问题描述:
我在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对象?
答
尝试使用正则表达式:
r"({.*?})"
这应该采取 “{...}” 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}']
这精美地工作。我可以通过访问list元素来访问json数据。谢谢! –