Разделение в байтах с разделителями

#python

#python

Вопрос:

Я хочу перехватить разделитель 7E, но у меня проблема.

пакет: 7E 0011B81123423B303B303B393 7E 8

Если 1 байт состоит из 2 символов, это будет выглядеть так: 7E 00 11 B8 11 23 42 3B 30 3B 30 3B 39 37 E8

 packet = b'7E0011B81123423B303B303B3937E8'
packet_res = packet.split(bytes(b'7E'))
print(packet_res)

>>> [b'', b'0011B81123423B303B303B393', b'8']
  

Предполагается, что это один, и в результате у меня их два.

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

1. какой результат вы ожидаете? 7E 00 11 B8 11 23 42 3B 30 3B 30 3B 39 37 E8 ?

2. Мне нужен один пакет, разделитель равен 7E. И здесь он видит два пакета, потому что появляется второй 7E, но не в одном байте.

Ответ №1:

Вы можете попробовать это:

 packet = b'7E0011B81123423B303B303B3937E8'
if packet.decode('utf-8').startswith('7E'):
    print([x for x in re.split(r'(w{2})', packet.decode('utf-8')) if x]) # first 
    print(' '.join([x for x in re.split(r'(w{2})', packet.decode('utf-8')) if x])) #second
  

вывод:

 ['7E', '00', '11', 'B8', '11', '23', '42', '3B', '30', '3B', '30', '3B', '39', '37', 'E8'] #first

7E 00 11 B8 11 23 42 3B 30 3B 30 3B 39 37 E8 #second
  

Ответ №2:

Попробуйте регулярное выражение:

 import re
packet = b'7E0011B81123423B303B303B3937E8'
print(' '.join(re.findall('..',''.join(re.findall('(7E.*)7E',str(packet))))))