忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT 视频 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 651 | 回复: 0

正则表达式 的问题求助 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2017-04-21 12:48 |显示全部楼层
con="""{@BLOCK|1%v603|00
{@A-DIO|0|+8.027530E-01|B-C{@LIM2|+8.760000E-01|+5.030000E-01}}
}
{@BLOCK|1%v2025|00
{@A-ZEN|0|+1.202626E+01{@LIM3|+1.200000E+01|+1.560000E+01|+1.020000E+01}}
}
{@BLOCK|1%v5140|00
{@A-DIO|0|+5.619131E-01{@LIM2|+8.000000E-01|+4.000000E-01}}
}
{@A-DIO|0|+6.619131E-01{@LIM2|+8.000000E-01|+4.000000E-01}}
}
{@A-DIO|0|+7.619131E-01{@LIM2|+8.000000E-01|+4.000000E-01}}
}
{@BLOCK|1%testjet|00
{@TJET|00|0000|1%x1
}
{@TJET|00|0000|1%x2811
}
}
{@BLOCK|1%v2873|00
{@A-MEA|0|+6.179264E-03|Normal_off{@LIM2|+2.000000E-01|-1.000000E-01}}
}
{@D-T|0|384||0|1%v6104
}
{@D-T|0|384||0|1%v6106
}
{@BLOCK|1%v2873|00
{@A-MEA|0|+3.142842E-01|Normal_on{@LIM2|+3.500000E+00|+2.500000E-01}}
}
"""
想要解析上面的文本
{@BLOCK 开头的一行文本,与后续行{@开头的行(后续行中间有{@不换行,),合并成一行,
写代码如下:

  1. con=con.replace('\n','!')+"{@BLOCK}"
  2. recordS=re.findall("{@BLOCK\|(.*?)(!{@[^B].*?})(?=!{@BLOCK)",con)#({@[^C].*?})(?={@BLOCK)",con)
  3. for record in recordS:
  4.     head,tail=record[0].replace('|','    '), re.sub('[{@\|}}]',' ',record[1])
  5.     rec=re.split('! !',tail)
  6.     for r in rec:
  7.             print (head + '' + r)
复制代码

结果如下:
1%v603    00!  A-DIO 0 +8.027530E-01 B-C  LIM2 +8.760000E-01 +5.030000E-01  !
1%v2025    00!  A-ZEN 0 +1.202626E+01  LIM3 +1.200000E+01 +1.560000E+01 +1.020000E+01  !
1%v5140    00!  A-DIO 0 +5.619131E-01  LIM2 +8.000000E-01 +4.000000E-01  
1%v5140    00  A-DIO 0 +6.619131E-01  LIM2 +8.000000E-01 +4.000000E-01  
1%v5140    00  A-DIO 0 +7.619131E-01  LIM2 +8.000000E-01 +4.000000E-01  !
1%testjet    00!  TJET 00 0000 1%x1
1%testjet    00  TJET 00 0000 1%x2811
1%testjet    00 //////////多了一行出来
1%v2873    00!  A-MEA 0 +6.179264E-03 Normal_off  LIM2 +2.000000E-01 -1.000000E-01  
1%v2873    00  D-T 0 384  0 1%v6104
1%v2873    00  D-T 0 384  0 1%v6106!
1%v2873    00!  A-MEA 0 +3.142842E-01 Normal_on  LIM2 +3.500000E+00 +2.500000E-01  !
***********************************
在代码里加了 去List 空项也不行
  1. while '' in rec:
  2.       rec.remove('')
复制代码

请教一下,怎么回事



您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP