【发布时间】:2020-02-20 16:32:27
【问题描述】:
我正在使用基本的 Python 代码从串行线路读取数据。我将该数据存储到一个局部变量中,然后使用re.search 查找特定值。然后我使用match.group 对数据进行分组,这在大多数情况下效果很好。
我的问题是,有时我从串行数据中的另一个位置获取数据,根据我正在寻找的模式,这是不正确的。有什么办法可以让这个更可靠吗?
python函数的一些sn-ps:
ser = serial.Serial('COM' + port, 115200, timeout=0, parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE, rtscts=0)
data = ser.read(9999)
ser.close()
match = re.search(r'Result1:({0}).*(\\r\\n)Result2:(\d)(\d)(\\r\\n)Result3:(\d*)'.format(Result1),
str(data))
Result1= match.group(1)
Result2= match.group(3) + match.group(4)
Result3= (match.group(6))
代码执行并返回预期结果时串行数据的样子:
结果1:11111111(0x11111111)\r\n结果2:09\r\n结果3:1000\r\n结果4:1\r \n结果 5:20 结果6:1\r\n结果7:02\r\n[那是RF 数据报:141490\r\n\Result1:11111111(0x11111111) \r\n结果2:09\r\n结果3:1000
代码执行并返回意外结果时串行数据的样子:
结果1:11111111(0x11111111)\r\n结果2:09\r\n结果3:1000\r\n结果4:1\r \n结果 5:20 结果6:1\r\n结果7:02\r\n[那是RF 数据报:141490\r\n\Result1:22222222(0x11111111) \r\n结果2:07\r\n结果3:1250
看起来Result2 和/或Result3 的值在大多数情况下都被正确提取,但是当最后一行有不同的值时(例如:07 和 1250),它会失败预期成绩。我假设上面显示的re.search 表达式正在按顺序查找结果 1-3,但这并不可靠。
谁能稍微说明一下我在这个问题上可能出了什么问题?
谢谢。
【问题讨论】:
-
\r\ns 最有可能是 CRLF 结尾,因此,您应该在模式中将\\r\\n替换为\r\n。
标签: python regex python-3.x serial-port regular-language