Chinaunix

标题: 正则表达式 的问题求助 [打印本页]

作者: sasinop    时间: 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('')
复制代码

请教一下,怎么回事








欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2