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 开头的一行文本,与后续行{@开头的行(后续行中间有{@不换行,),合并成一行,写代码如下:复制代码
- con=con.replace('\n','!')+"{@BLOCK}"
- recordS=re.findall("{@BLOCK\|(.*?)(!{@[^B].*?})(?=!{@BLOCK)",con)#({@[^C].*?})(?={@BLOCK)",con)
- for record in recordS:
- head,tail=record[0].replace('|',' '), re.sub('[{@\|}}]',' ',record[1])
- rec=re.split('! !',tail)
- for r in rec:
- 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 !
***********************************
复制代码
- while '' in rec:
- rec.remove('')
请教一下,怎么回事
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |