从一个字符串中提取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 restr = '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