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

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

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


回答:

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


回答:

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]


回答:

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


回答:

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

import re

str = 'abaafedf{"name":peter,"jobs":{"title":"supervisor","age":45}}daskj{sakjdkas}'

ptr = r'{.*?}}'

res = re.search(ptr, str)

print(res.group(0))

以上是 从一个字符串中提取json字符串的部分 的全部内容, 来源链接: utcz.com/a/165001.html

回到顶部