在没有找到解决方案的情况下研究了RE模块

时间:2015-03-09 17:45:10

标签: python

使用python 2.7.5和以下字符串。我想用以下代码求和。有人能引导我朝着正确的方向前进吗?感谢

<msg><src>CC128-v0.15</src><dsb>01068</dsb><time>09:19:01</time><tmprF>68.9</tmprF><sensor>0</sensor><id>00077</id><type>1</type><ch1><watts>00226</watts></ch1><ch2><watts>00189</watts></ch2></msg>

try:
    watts_ex = re.compile('<watts>([0-9]+)</watts>')
    temp_ex = re.compile('<tmprF>([\ ]?[0-9\.]+)</tmprF>') 
    time_ex = re.compile('<time>([0-9\.\:]+)</time>')

    watts = str(int(watts_ex.findall(data)[0]))
    temp = temp_ex.findall(data)[0].strip() 
    time = time_ex.findall(data)[0]
except:
    sys.stderr.write("Could not get details from device")
    sys.exit()

# Replace format string
format = format.replace("{{watts}}", watts)
format = format.replace("{{time}}", time)
format = format.replace("{{temp}}", temp)

print format

if __name__ == "__main__":
    main()

""" output is 09:19:01:, 226 watts, 68.9F (watts should = 415 watts """

1 个答案:

答案 0 :(得分:0)

这看起来像一个类似XML的语言,我强烈建议使用XML库而不是正则表达式来解析它。

代码中的问题是这一部分:

watts = str(int(watts_ex.findall(data)[0]))

您刚刚使用0中的结果findall(),我想您想要这样的内容:

watts = str(sum(int(w) for w in watts_ex.findall(data)))