从一个字符串中提取json字符串的部分

发布于 2022-09-13 00:28:29 字数 229 浏览 19 评论 0

比如我有一个字符串'abaafedf{"name":peter,"jobs":{"title":"supervisor","age":45}}daskj{sakjdkas}'
我想用正则把其中的{"name":peter,"jobs":{"title":"supervisor","age":45}}提取出来,也就是字符串中出现的第一个大花括号下的完整内容,注意:不想要后面的{sakjdkas},不知道这个正则表达式该怎么写,真心求教。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

余罪 2022-09-20 00:28:29

正则好像做不了或者说很受限,可以根据“{”出现的次数与位置序号计算得出一个完整的json字符
re.search('({.+?}+)', a).group(1) 仅能匹配你那条字符格式
换成 'abaafedf{"name":peter,"jobs":{"title":"supervisor","age":45},"b":1}daskj{sakjdkas}'就不行了

残疾 2022-09-20 00:28:29

json可以无限嵌套,纯正则没法处理这种无限嵌套的问题,如果限定一个最大嵌套深度的话倒还行。建议用脚本语言简单处理下更快,比如python:

def extract_json(s):
    i = s.index('{')
    count = 1 #当前所在嵌套深度,即还没闭合的'{'个数
    for j,c in enumerate(s[i+1:], start=i+1):
        if c == '}':
            count -= 1
        elif c == '{':
            count += 1
        if count == 0:
            break
    assert(count == 0) #检查是否找到最后一个'}'
    return s[i:j+1]
南城旧梦 2022-09-20 00:28:29

是呀,只用正则的话感觉很受限啊,
建个栈,遍历{入站,遇到}出栈,取到位置再截取感觉简单点

月野兔 2022-09-20 00:28:29

按照题主的例子来说,以下代码倒是可以实现,只是不知道是否满足题主的要求……

import re

str = 'abaafedf{"name":peter,"jobs":{"title":"supervisor","age":45}}daskj{sakjdkas}'
ptr = r'{.*?}}'

res = re.search(ptr, str)
print(res.group(0))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文