用正则表达式处理一个复杂字符串(类似json格式)
2024-09-05 04:28:15
#利用正则输出{}中的内容
str1="""var local=[{provinceCode:'310000',
cityCode:'310100',
text:'上海',
dpt:'20222003',
carNo:'沪A',
pName:'上海市',
cName:'上海市'},
cityCode:'310100',
text:'上海',
dpt:'20222003',
carNo:'沪A',
pName:'上海市',
cName:'上海市'},
{provinceCode:'322222',
cityCode:'310100',
text:'北京',
dpt:'20222003',
carNo:'京A',
pName:'北京市',
cName:'北京市'}]"""
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)
最新文章
- MySQL中int类型的字段使用like查询方法
- REDHAT6.2配置yum源(64位)(转载)
- Linux shell 之 提取文件名和目录名的一些方法
- 2018年手机应用UI设计趋势预测
- 设计模式之观察者(OBSERVER)模式
- css 四周边框角加粗效果
- Spring框架中<;constructor-arg>;与<;property>;理解
- TensorFlow 算术运算符
- IPOPT工具解决非线性规划最优化问题使用案例
- js中的async await
- struts2中ognl标签具体解释
- ARM裸板开发:07_IIC 通过IIC总线接口读写时钟芯片时间参数实现的总结
- Mysql最左匹配原则实践(原创)
- 微信小程序地图之逆地理编码
- VSS2005设置不输入密码直接登录VSS
- 20145316许心远《Java程序设计》第5周学习总结
- Python中断多重循环的几种思路exit_flag
- Centos 7搭建Gitlab服务器(一),搭配文章(二)一起使用,效果更好
- Linux定时增量更新文件--转
- Python学习笔记 - day11 - Python操作数据库
热门文章
- npm镜像指定用淘宝镜像去下载
- nginx+keepalived主从高可用配置
- uwp,c#,listView与gridView列表控件进阶
- 27.Spark中transformation的介绍
- 《Mysql - 为什么表数据删掉一半,表文件大小不变?》
- 给内部类对象数组属性赋值时报错:Exception in thread "main" java.lang.NullPointerException
- vim字符匹配
- (转)从0移植uboot(三) _编译最小可用uboot
- 在JAVA中如何获取当前源文件名以及代码的行号
- SQL Server 2017 左补齐