Это Коды терминала ANSI . Они сигнализируются ESC (байт 27, видимый в Python как \x1B
), за которым следует [
, затем некоторые ;
-разделенные параметры и, наконец, буква, указывающая, какая это команда. (m
- это изменение цвета.)
Параметры обычно являются числами, поэтому для этого простого случая вы можете избавиться от них с помощью:
ansisequence= re.compile(r'\x1B\[[^A-Za-z]*[A-Za-z]')
ansisequence.sub('', string)
Технически для некоторых (не связанных с цветом) управляющих кодов они могут быть общими строками, что делает синтаксический анализ раздражающим. Это редко встречается, но если бы вы это сделали, я думаю, вам пришлось бы использовать что-то сложное, например:
\x1B\[((\d+|"[^"]*")(;(\d+|"[^"]*"))*)?[A-Za-z]
Лучше всего было бы убедить всех, кто генерирует строку, что вы не являетесь терминалом ANSI, поэтому он не должен включать цветовые коды в свой вывод.