Как убрать последовательность символ из byte array?

Имеется последовательность byte array, например:

b'ontetwothree 1/10 OK
fourfivesex 2/10 /□\□/□\□/□\□/□\ OK
seveneightnine 3/10 \□/□\ OK'

Во второй и третьей строке есть последовательность символов, которые получаются следующим образом. Приложение, написанное на PyQt5, используя QProcess, запускает консольную программу, а вывод этой программы отображается в QTextEdit. Приложение, которое запускает QProcess, полностью консольное. В этом приложении ожидание ответа, например, от удалённого сервера, реализовано посредством "spinning command line cursor". Само собой, если в консоли эта фича отрабатывает как надо, то перенося вывод в PyQt-виджет будет то, что я написал выше - слэш, обратный слэш и квадрат (u'\u25A1'). В последовательности byte array содержатся также другие ненужные символы, которые я убираю:

string = re.sub(b"\x1b.{2,4}", b"", byte_raw)

Вопрос, какой регуляркой можно избавиться от этой последовательности, учитывая, что в выводе присутствуют нужные слэши, например "...othree 1/10 OK..."? Или может есть способ очистить вывод от ненужных символов с помощью QProcess? Спасибо.


Ответы (1 шт):

Автор решения: Wiktor Stribiżew

Используйте

re.sub(b'(?:/\xe2\x96\xa1\\\\(?:\xe2\x96\xa1)?)+\\\\?', b'', byte_raw, flags=re.I)

Подробности

  • (?:/\xe2\x96\xa1\\\\(?:\xe2\x96\xa1)?)+ - 1 и более последовательностей
    • / - символ .
    • \xe2\x96\xa1 - последовательность байтов
    • \\ - символ \
    • (?:\xe2\x96\xa1)? - необязательная последовательность байтов
  • \\? - необязательный символ \
→ Ссылка