Как удалить коды ANSI из строки? - PullRequest
0 голосов
/ 24 марта 2019

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

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

"[0; 1; 36 м (Интернет): вы говорите:" Текст здесь. "[0; 37 м"

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

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

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

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

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

1 Ответ

1 голос
/ 24 марта 2019

В вашем примере строки отсутствует 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...