比如我有一个字符串'abaafedf{"name":peter,"jobs":{"title":"supervisor","age":45}}daskj{sakjdkas}'
我想用正则把其中的{"name":peter,"jobs":{"title":"supervisor","age":45}}提取出来,也就是字符串中出现的第一个大花括号下的完整内容,注意:不想要后面的{sakjdkas},不知道这个正则表达式该怎么写,真心求教。
比如我有一个字符串'abaafedf{"name":peter,"jobs":{"title":"supervisor","age":45}}daskj{sakjdkas}'
我想用正则把其中的{"name":peter,"jobs":{"title":"supervisor","age":45}}提取出来,也就是字符串中出现的第一个大花括号下的完整内容,注意:不想要后面的{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))
3 回答3.1k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
5 回答1.8k 阅读
2 回答1.9k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
2 回答1.8k 阅读✓ 已解决
4 回答1.9k 阅读
正则好像做不了或者说很受限,可以根据“{”出现的次数与位置序号计算得出一个完整的json字符
re.search('({.+?}+)', a).group(1) 仅能匹配你那条字符格式
换成 'abaafedf{"name":peter,"jobs":{"title":"supervisor","age":45},"b":1}daskj{sakjdkas}'就不行了