在python中如何从一个长字符串中查找所有字典

2024-09-28 22:20:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从一个长字符串中检索所有类似JSON的字典。 例如

{"uri": "something"} is referencing {"link": "www.aurl.com"}

我想得到{"uri": "something"}和{}作为结果。有没有一种方法可以通过python中的regex来实现呢?在


Tags: 方法字符串comjson字典iswwwlink
1条回答
网友
1楼 · 发布于 2024-09-28 22:20:17

实现这一点的“最佳”方法可能是让真正的JSON解码器完成工作,而不是使用糟糕的regex。找到所有打开的大括号作为“可能的对象起点”,然后尝试用^{}^{}方法解析它们(它返回解析的对象和成功时消耗的字符数,从而可以有效地跳过成功解析的对象)。例如:

import json

def get_all_json(teststr):
    decoder = json.JSONDecoder()
    # Find first possible JSON object start point
    sliceat = teststr.find('{')
    while sliceat != -1:
        # Slice off the non-object prefix
        teststr = teststr[sliceat:]
        try:
            # See if we can parse it as a JSON object
            obj, consumed = decoder.raw_decode(teststr)
        except Exception:
            # If we couldn't, find the next open brace to try again
            sliceat = teststr.find('{', 1)
        else:
            # If we could, yield the parsed object and skip the text it was parsed from
            yield obj
            sliceat = consumed

这是一个生成器函数,因此您可以逐个迭代对象,例如for obj in get_all_json(mystr):,或者如果您需要它们同时用于索引、多次迭代等等,all_objs = list(get_all_json(mystr))。在

相关问题 更多 >