用正則表達式處理一個復雜字符串(類似json格式)


#利用正則輸出{}中的內容

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(r'province\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被加"",所以使用后置肯定(?=:),表示有:的才會匹配

print(temp) s='dd='+'{'+temp+'}' #用exec處理內層字符串為字典 exec(s) d[outkey]=dd print('最終處理結果:',d)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM