Я прочитал файл:
local logfile = io.open("log.txt", "r")
data = logfile:read("*a")
print(data)
выход:
...
"(\.)\n(\w)", r"\1 \2"
"\n[^\t]", "", x, re.S
...
Да, файл журнала выглядит ужасно, так как он полон различных команд
Как я могу вызвать gsub
и удалить строку "(\.)\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.