首页 > Web开发 > 详细

用正则表达式处理一个复杂字符串(类似json格式)

时间:2019-02-02 19:40:17      阅读:245      评论:0      收藏:0      [点我收藏+]

#利用正则输出{}中的内容

str1="""var local=[{provinceCode:‘310000‘,
          cityCode:‘310100‘,
          text:‘上海‘,
          dpt:‘20222003‘,
          carNo:‘沪A‘,
          pName:‘上海市‘,
          cName:‘上海市‘},
         {provinceCode:‘322222‘,
          cityCode:‘310100‘,
          text:‘北京‘,
          dpt:‘20222003‘,
          carNo:‘京A‘,
          pName:‘北京市‘,
          cName:‘北京市‘}]"""
#方法1
 
import re
print
(re.findall(r{?\w+:\‘\w*\‘,?}?,str1,re.I|re.M)) res=re.sub(r\s+,‘‘,str1,re.I|re.M) print(res:,res) result=re.findall(r{?\w+:\‘\w+\‘,?}?,res,re.I|re.M) print(result:,result) rr=‘‘ import string s=string.punctuation d={} for i in result: if i[0]=={: #处理 第一行包含{开头的 out_key=i.split(:)[1].strip(s) d[out_key]={} inner_key=i.split(:)[0][1:] value=i.split(:)[1].strip(s) d[out_key][inner_key]=value elif i[-1]==}: #处理最后一行包含}结尾的 inner_key=i.split(:)[0] value=i.split(:)[1][:-1].strip(s) d[out_key][inner_key]=value else: #处理中间普通行 inner_key=i.split(:)[0] value=i.split(:)[1].strip(s) d[out_key][inner_key]=value print(处理结果:,d) for i in result: print(分组打印:,i)
#方法2
#直接取到了大括号内的内容的匹配方式:
print(re.findall(r{.*?},str1,re.M|re.DOTALL))

#然后把结果处理成一个字典:
result=re.findall(r{.*?},str1,re.M|re.DOTALL)

print(吴老师的reuslt:,result)

def func(s):
    s="+str(s.group(1))+"+:  #正常不需要 返回:但是处理京A的A特殊处理一下
    return s
d={}
for i in result:
    outkey=re.search(rprovince\w+:(\‘\w+\‘),i).group(1)  #以province的编号作为外层key
    
    d[outkey]={}                    #定义内层字典,存储明细
    temp=re.sub(r"[{}\s]+","",i)            #替换掉字符串的{}及空白
        
    temp=re.sub(r([a-zA-Z]+):,func,temp)  #正常不加:,但是会导致京A的A被加"",所以替换掉:再有func返回
    print(temp)
    
    s=dd=+{+temp+}             #用exec处理内层字符串为字典
    exec(s)
    d[outkey]=dd
    
print(最终处理结果:,d)

 

 

用正则表达式处理一个复杂字符串(类似json格式)

原文:https://www.cnblogs.com/xiaoxiao075/p/10349020.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!