Я читаю данные из последовательной линии, используя базовый код 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))
Как выглядят последовательные данные, когда код выполняется и возвращает ожидаемый результат:
Результат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 [То есть датаграмма РФ: 141490 \ r \ n \ Result1: 11111111 (0x11111111) \ r \ nРезультат2: 09 \ r \ nResult3: 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 [То есть датаграмма РФ: 141490 \ r \ n \ Result1: 22222222 (0x11111111) \ r \ nResult2: 07 \ r\ nResult3: 1250
Похоже, что значения для Result2
и / или Result3
выбраны правильноБольшую часть времени, но когда в последней строке есть другие значения, как показано выше (пример: 07 и 1250), это не соответствует ожидаемым результатам. Я предположил, что приведенное выше выражение re.search
ищет результаты 1-3 по порядку, но оно просто ненадежно.
Может ли кто-нибудь пролить немного света на то, где я могу ошибаться с этим?
Спасибо.