我是这个网站和python的新手。我一直致力于一个需要从传入的串行数据中提取变量并最终显示它的项目。我目前正致力于解析数据,而且我遇到了一些麻烦。 串行数据如下所示:
a3b5f45c9g8a4c10f64;
f4h87d34k9h4j3d3;
h6f54a12a13a14a15b12b13;
在值之前的字母表示多个变量,它们没有按特定顺序到达。大约每秒一次,这一行以分号结束。相同的变量可以多次出现或者根本不出现。我最接近的是使用正则表达式来找到识别字母和下一个非数字之间的值,如果这是有意义的话。我遇到的问题是它只返回第一个匹配然后停止。我需要不断更新变量。在过去的几天里,我一直在挠头,任何指导都非常感谢。
import serial
import re
ser = serial.Serial('COM6', 9600, timeout=2)
while True:
data_raw = ser.readline()
print(data_raw)
apples = re.search('a(.+?)\D', data_raw)
if apples:
applesvar = apples.group(1)
print applesvar
cherries = re.search('c(.+?)\D', data_raw)
if cherries:
cherriesvar = cherries.group(1)
print cherriesvar
ser.close
答案 0 :(得分:1)
你快到了。通过使用示例的第一行
line = 'a3b5f45c9g8a4c10f64'
re.findall('a(.+?)\D', line)
['3', '4']
re.findall('c(.+?)\D', line)
['9', '10']