【问题】
如图所示,现在想输出附件中cpress值开始不等于零和重新全部等于零时的“step time ”值,也就是想输出附件中“step time= 1.0001E-04 ”和“step time=2.500E-04” 这两个结果 |
【问题解答】
写了python代码,调试了半天,终于达到要的效果了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | #!/usr/bin/python # -*- coding: utf-8 -*- """ Function: 【问题解答】用Python的正则去匹配cpress值开始不等于零和重新全部等于零时的step time值 Author: Crifan Li Version: 2013-06-20 Contact: https://www.crifan.com/contact_me/ """ import re; def step_time_betwen_not_zero_and_zero(): inputStr = open ( "./input.txt" ).read(); #print "inputStr=",inputStr; #matchedGroup = re.findall("step time= [\w\-]+\s+(?:node: \d+\s+cpress=0\.0+\s+)*node: \d+\s+cpress=(?:(?:[1-9]+\.\d+)|(?:0\.0*[1-9]+\d*))", inputStr, re.S); #matchedGroup = re.search("step time= [\w\-]+\s+(node: \d+\s+cpress=0\.0+\s+)*node: \d+\s+cpress=[1-9]\d*\.\d+\s+", inputStr, re.S); #matchedGroup = re.search("step\s+time=\s+[\w\.\-]+\s+(node: \d+\s+cpress=0\.0+\s+)*", inputStr, re.S); #matchedGroup = re.findall("step\s+time=\s+[\w\.\-]+\s+(?:node: \d+\s+cpress=0\.0+\s+)*", inputStr, re.S); #matchedGroup = re.findall("step\s+time=\s+[\w\.\-]+\s+(?:node: \d+\s+cpress=0\.0+\s+)*node:\s+\d+\s+cpress=[1-9]\d*\.\d+\s+", inputStr, re.S); #matchedGroup = re.findall("step\s+time=\s+[\w\.\-]+\s+(?:node: \d+\s+cpress=0\.0+\s+)*(?:(?:node:\s+\d+\s+cpress=[1-9]\d*\.\d+\s+)|(?:frame=\d+\s+))+", inputStr, re.S); #matchedGroup = re.findall("step\s+time=\s+[\w\.\-]+\s+(?:node: \d+\s+cpress=0\.0+\s+)*(?:(?:node:\s+\d+\s+cpress=[1-9]\d*\.\d+\s+)|(?:frame=\d+\s+)|(?:step\s+time=\s+[\w\.\-]+\s+))+", inputStr, re.S); #matchedGroup = re.findall("step\s+time=\s+[\w\.\-]+\s+(?:node: \d+\s+cpress=0\.0+\s+)*(?:(?:node:\s+\d+\s+cpress=[1-9]\d*\.\d+\s+)|(?:frame=\d+\s+)|(?:step\s+time=\s+[\w\.\-]+\s+)|(?:node: \d+\s+cpress=0\.0+\s+))+", inputStr, re.S); #matchedGroup = re.findall("step\s+time=\s+[\w\.\-]+\s+(?:node: \d+\s+cpress=0\.0+\s+)+(?:node:\s+\d+\s+cpress=[1-9]\d*\.\d+\s+)(?:(?:node:\s+\d+\s+cpress=[1-9]\d*\.\d+\s+)|(?:frame=\d+\s+)|(?:step\s+time=\s+[\w\.\-]+\s+)|(?:node: \d+\s+cpress=0\.0+\s+))+?(?:frame=\d+\s+)(?:step\s+time=\s+[\w\.\-]+\s+)(?:node: \d+\s+cpress=0\.0+\s+)+(?=frame=\d+)", inputStr, re.S); #matchedGroup = re.findall("step\s+time=\s+[\w\.\-]+\s+(?:node: \d+\s+cpress=0\.0+\s+)*(?:node:\s+\d+\s+cpress=(?:(?:[1-9]\d*\.\d+)|(?:0\.[1-9]\d*))\s+)(?:(?:node:\s+\d+\s+cpress=(?:(?:[1-9]\d*\.\d+)|(?:0\.[1-9]\d*))\s+)|(?:frame=\d+\s+)|(?:step\s+time=\s+[\w\.\-]+\s+)|(?:node: \d+\s+cpress=0\.0+\s+))+(?:frame=\d+\s+)(?:step\s+time=\s+[\w\.\-]+\s+)(?:node: \d+\s+cpress=0\.0+\s+)+(?:frame=\d+\s+)", inputStr, re.S); matchedGroup = re.findall( "(?:(step\s+time=\s+[\w\.\-]+)\s+)(?:node: \d+\s+cpress=0\.0+\s+)*(?:node:\s+\d+\s+cpress=(?:(?:[1-9]\d*\.\d+)|(?:0\.[1-9]\d*))\s+)(?:(?:node:\s+\d+\s+cpress=(?:(?:[1-9]\d*\.\d+)|(?:0\.[1-9]\d*))\s+)|(?:frame=\d+\s+)|(?:step\s+time=\s+[\w\.\-]+\s+)|(?:node: \d+\s+cpress=0\.0+\s+))+(?:frame=\d+\s+)(?:(step\s+time=\s+[\w\.\-]+)\s+)(?:node: \d+\s+cpress=0\.0+\s+)+(?:frame=\d+\s+)" , inputStr, re.S); print "matchedGroup=" ,matchedGroup; if (matchedGroup): for eachMatched in matchedGroup: print '-' * 80 ; print "eachMatched=" ,eachMatched; # matchedGroup= [('step time= 1.0001E-04', 'step time= 5.500E-04')] # -------------------------------------------------------------------------------- # eachMatched= ('step time= 1.0001E-04', 'step time= 5.500E-04') if __name__ = = "__main__" : step_time_betwen_not_zero_and_zero(); |
【总结】
本来以为不难的,实际上,还是不容易的,也是调试了半天,才写出来的。
不过,这种问题,对于正则,也还是属于那种,稍微花点时间,就可以搞定的问题的。
转载请注明:在路上 » 【问题解答】用Python的正则去匹配cpress值开始不等于零和重新全部等于零时的step time值