Выходящие цветные строки с регулярным выражением в python - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь экранировать строки в этой последовательности

[0m[ERROR] [1585551547.349979]: Failed to create bragfiles/downtimer/fight100/2020-03-27. Error: 550 Create directory operation failed.
[ERROR] [1585551547.349979]: Failed to create bragfiles/downtimer/fight100/2020-03-27. Error: 550 Create directory operation failed.

и

[32m[INFO] [2020-03-29 23:58:50.607198] TaskManager.poll: system has no current task.[0m
[INFO] [2020-03-29 23:58:50.607198] TaskManager.poll: system has no current task.

Плюс случайный двойной символ

"[0m[32m[INFO] [2020-03-29 23:58:34.695268] Polling for updates from the server for fight100...[0m"
"[INFO] [2020-03-29 23:58:34.695268] Polling for updates from the server for fight100..."

Я сталкивался с этим раньше, но в моем случае это кажется неправильным:

  1. Как удалить escape-последовательности ANSI из строка в python
  2. Удалить все цвета / стили ANSI из строк

Я пробовал различные варианты \x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~]) но я не думаю, что это отвечает всем требованиям

Но ни одно из регулярных выражений, которые я пробовал до сих пор, не кажется обобщенным c достаточно

1 Ответ

1 голос
/ 15 апреля 2020

(одна или две (цветовые escape-последовательности)), за которыми следуют (прописные буквенные символы в квадратных скобках) (положительный взгляд вперед)

pat = r'''((\[\d+m){1,2})(?=\[[A-Z]+\])'''

Работает с этой строкой:

s = '''[0m[ERROR] [1585551547.349979]: xyz xyz.
[0m[32m[INFO] [2020-03-29 23:58:34.695268] hjk hjk.[0m[32m[INFO] [2020-03-29 23:58:34.695268] foo bar foo'''

Положительный прогноз предотвращает захват этого последнего бита.


>>> print(re.sub(pat,'',s))
[ERROR] [1585551547.349979]: xyz xyz.
[INFO] [2020-03-29 23:58:34.695268] hjk hjk.[INFO] [2020-03-29 23:58:34.695268] foo bar foo
>>>

Если вам нужно удалить последовательности, задающие цвета переднего плана и , например

[2m[93m[0m[32m[INFO] [2020-03-29 23:58:34.695268] foo bar foo

используйте pat = r'''((\[\d+m){1,})(?=\[[A-Z]+\])''' вместо (один или несколько) вместо (один или два).


Если есть , также такие вещи

[0m[1;37m[ERROR] [1585551547.349979]: xyz xyz.
[0m[1;37m[0;32m[ERROR] [1585551547.349979]: xyz xyz.

use pat = r'''(\[([01];)?\d+m){1,}(?=\[[A-Z]+\])'''


Некоторые из ваших примеров строк показывали цветовые последовательности в середине строки, и вы хотели, чтобы результат показал их замену - вопреки вашему комментарию

все цветовые коды в начале строк.

Эти шаблоны будут удалять последовательность из middle строки .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...