前几天遇到一个需求,在数据库存储的是text类型,是字符串压缩后的json格式的
但是呢 会有两种情况,
第一种是对话形式的意见反馈,要取出最后一条content
第二种是留言形式的意见反馈,要取出content
第一种
[{
"msg_id": 2,
"type": 2,
"content": "亲,可以说说具体是在使用哪个功能发生闪退的吗",
"is_img": 0,
"created_at": 1546484128
},
{
"msg_id": 1,
"type": 1,
"content": "使用软件时经常闪退",
"is_img": 0,
"created_at": 1546357941
}
]
第二种
{
"content": "总是闪退,不能用,一点开,就退出",
"images": []
}
啊?这?
格式都不统一,这数据库存的这样?还要我提取?
好吧,硬着头皮上吧。
第一种方案:
使用json.loads 转换成python可以识别的类型
然后type检查是list还是dict,list就去索引-1的content,dict就直接取dict
但是呢,这种方案需要从数据库读取再写脚本,操作比较复杂
思来想去,感觉太麻烦 还是直接正则匹配吧!
但是这个对话的长度也不一定,看来得使用贪婪匹配 所以就有了第二种方案。
第二种方案:
regexp_extract(text, ‘.+“content”:"(.*?)"’)
.+"content":"(.*?)"
使用.+
贪婪匹配到content前面所有的字符串,然后再获取到最后我们需要的字符串,用()
包起来,需要注意的是,我们content需要的内容需要非贪婪匹配使用.*?
来匹配最小的一个双引号里面的内容。
当然了,如果我们需要匹配到所有的content,只需要把正则改为"content":"(.*?)"
最后
推荐一个在线测试的地址:https://c.runoob.com/front-end/854