Как удалить ANSI-коды из строки?

#lua

#lua

Вопрос:

Я работаю над обработкой строк с использованием LUA и у меня возникли проблемы со следующей проблемой.

Используя это в качестве примера исходных данных, которые мне даны —

«[0;1;36m(Web): Вы говорите: «Текст здесь».[0;37m»

Я хочу сохранить строку неповрежденной, за исключением удаления кодов ANSI.

Мне указали на использование gsub с сопоставлением шаблона LUA, но, похоже, я не могу получить правильный шаблон. Я также не уверен, как точно ссылаться на отправленный escape-символ.

 text:gsub("[27[([d;] )m]", "")
or
text:gsub("%x%[[%d ; ]m", "")
  

В случае успеха все, с чем я хочу остаться, используя приведенный выше пример, было бы:

(Веб): Вы говорите: «Текст здесь».

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

1. Что такое «коды ANSI»?

2. @NicolBolas это выглядит как en.m.wikipedia.org/wiki/ANSI_escape_code

Ответ №1:

В вашем примере со строкой отсутствует escape-символ ASCII 27.

Вот один из способов:

 s = 'x1b[0;1;36m(Web): You say, "Text here."x1b[0;37m'
s = s:gsub('x1b%[%d ;%d ;%d ;%d ;%d m','')
     :gsub('x1b%[%d ;%d ;%d ;%d m','')
     :gsub('x1b%[%d ;%d ;%d m','')
     :gsub('x1b%[%d ;%d m','')
     :gsub('x1b%[%d m','')
print(s)