gpt4 book ai didi

Python-串行读取并使用正则表达式对数据进行分组

转载 作者:太空宇宙 更新时间:2023-11-03 20:14:28 25 4
gpt4 key购买 nike

我正在使用基本的 python 代码从串行线路读取数据。我将该数据存储到局部变量中,然后使用 re.search 查找特定值。然后,我使用 match.group 对数据进行分组,这在大多数情况下效果很好。

我的问题是,有时我从串行数据中的另一个位置获取数据,根据我正在寻找的模式,这是不正确的。有什么办法可以让它更可靠吗?

Python 函数的一些片段:

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))

代码执行并返回预期结果时串行数据是什么样的:

Result1:11111111(0x11111111)\r\nResult2:09\r\nResult3:1000\r\nResult4:1\r\nResult5:20 Result6:1\r\nResult7:02\r\n[Thats a RF Datagram:141490\r\n\Result1:11111111(0x11111111) \r\nResult2:09\r\nResult3:1000

当代码执行并返回意外结果时,串行数据是什么样的:

Result1:11111111(0x11111111)\r\nResult2:09\r\nResult3:1000\r\nResult4:1\r\nResult5:20 Result6:1\r\nResult7:02\r\n[Thats a RF Datagram:141490\r\n\Result1:22222222(0x11111111) \r\nResult2:07\r\nResult3:1250

看起来 Result2 和/或 Result3 的值在大多数情况下都能正确获取,但是当最后一行上有不同的值时,如上所示(例如:07 和 1250),它未达到预期结果。我假设上面显示的 re.search 表达式按顺序查找结果 1-3,但它并不可靠。

有人能告诉我这个问题可能出在哪里吗?

谢谢。

最佳答案

您在模式中使用 .*,这是贪婪,因此它将尽可能匹配,跳过 Result6 和 7直到找到第二个 Result2:

使用 .*? 代替,这是非贪婪版本,匹配尽可能少。请参阅re .

关于Python-串行读取并使用正则表达式对数据进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58539596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com