Я прочитал файл:
local logfile = io.open("log.txt", "r")
data = logfile:read("*a")
print(data)
вывод:
...
"(\.)\n(\w)", r"\1 \2"
"\n[^\t]", "", x, re.S
...
Да, лог-файл выглядит ужасно, так как он полон различных команд
Как я могу вызвать gsub
и удалить строку ie "(\.)\n(\w)", r"\1 \2"
из переменной данных?
Фрагмент ниже не работает:
s='"(\.)\n(\w)", r"\1 \2"'
data=data:gsub(s, '')
Я думаю, что нужно сделать некоторое экранирование. Любое простое решение?
Обновление:
local data = [["(\.)\n(\w)", r"\1 \2"
"\n[^\t]", "", x, re.S]]
local s = [["(\.)\n(\w)", r"\1 \2"]]
local function esc(x)
return (x:gsub('%%', '%%%%')
:gsub('^%^', '%%^')
:gsub('%$$', '%%$')
:gsub('%(', '%%(')
:gsub('%)', '%%)')
:gsub('%.', '%%.')
:gsub('%[', '%%[')
:gsub('%]', '%%]')
:gsub('%*', '%%*')
:gsub('%+', '%%+')
:gsub('%-', '%%-')
:gsub('%?', '%%?'))
end
print(data:gsub(esc(s), ''))
Кажется, это работает нормально, только мне нужно экранировать, escape-символ %
, так как это не сработает, если %
находится в совпадающей строке . Я пробовал :gsub('%%', '%%%%')
или :gsub('\%', '\%\%')
, но это не Работа.
Обновление 2:
ОК, %
можно экранировать таким образом, если установить сначала в приведенной выше «таблице», которую я только что исправил
:ужасный опыт:
Обновление 3 :
Экранирование ^
и $
Как указано в руководстве Lua ( 5.1, 5.2, 5.3 )
Символ вставки
^
в начале шаблона закрепляет совпадение в начале строки темы.$
в конце шаблона закрепляет совпадение в конце строки темы. В других позициях^
и$
не имеют особого значения и представляют сами себя.
Поэтому лучше экранировать ^
и $
только тогда, когда они найдены (соответственно) и в начале или в конце строки.
Несовместимость Lua 5.1 - 5.2+
string.gsub
теперь вызывает ошибку, если строка замены содержит%
, за которым следует символ, отличный от разрешенного%
или цифра.
Нет необходимости удваивать каждый %
в замещающей строке. См. lua-users.