Почему обычные совпадения работают только для текстовых файлов, но не для потока данных из последовательного?

#python #regex #serial-port #expression

Вопрос:

Я новичок в python, и я попытался извлечь некоторые элементы из строковых данных, это отлично работает при чтении одних и тех же данных из файла txt или жестко закодировать нужный ввод, но не для последовательного чтения, где я хочу, чтобы это работало

Работает извлечение нужных данных

 serialdata = "data:,2,24,1,-199,-867rndata:,4,40,2,-964,-425rnTS:2TT:3rnHASH:3rnPENDING:2402rnME:55rnMA:33rnKE:75rnKA:3rn" ###" ###
pKE ='KE:(?P<KE>.*)rn'
pKA ='KA:(?P<KA>.*)rn'

match = re.search(pKE pKA, serialdata)
print(match)
if match:
    print("Matches!!")
    print (match.group("KE"))
    print (match.group("KA"))
else:
    result = ""
 

не работает чтение с последовательного

 self.s = serial.Serial(com, timeout=5, baudrate=115200)
serialdata = self.s.readline().decode('utf-8')
     
serialdata = "data:,2,24,1,-199,-867rndata:,4,40,2,-964,-425rnTS:2TT:3rnHASH:3rnPENDING:2402rnME:55rnMA:33rnKE:75rnKA:3rn" ###" ###
pKE ='KE:(?P<KE>.*)rn'
pKA ='KA:(?P<KA>.*)rn'

match = re.search(pKE pKA, serialdata)
print(match)
if match:
    print("Matches!!")
    print (match.group("KE"))
    print (match.group("KA"))
else:
    result = ""
 

совпадение возвращает none и O a, получая то же самое, что я жестко закодировал выше…
есть какие-нибудь предложения?

Примечание:Я могу читать с последовательного порта, но не извлекать элементы с помощью регулярного выражения

С уважением

Комментарии:

1. Код, о котором вы говорите, что он не работает serialdata = self.s.readline().decode('utf-8') , сопровождается обоими serialdata = "data:,2,2 ..." . Это не может быть правдой, не так ли? Кроме того, если вы выполняете только один вызов readline() , как вы ожидаете, что две rn последовательности совпадут?