Я читаю файл:
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), ''))
Кажется, это работает нормально, только то, что мне нужно убежать, экранирующий символ %
, какэто не будет работать, если %
находится в соответствующей строке.Я пытался :gsub('%%', '%%%%')
или :gsub('\%', '\%\%')
, но это не работает.
Обновление 2 :
OK, %
можно экранировать таким образомесли установить первым в приведенной выше «таблице», которую я только что исправил
: ужасный опыт:
Обновление 3 :
Экранирование ^
и $
Как указано в руководстве Lua ( 5.1 , 5.2 , 5.3 )
Каретка ^
в начале шаблона закрепляет совпадение в начале строки объекта.A $
в конце шаблона закрепляет совпадение в конце строки темы.В других позициях ^
и $
не имеют особого значения и представляют себя.
Так что лучше было бы избегать ^
и $
только тогда, когда они найдены (соответственно) и начало или конец строки.
Lua 5.1 - 5.2+ несовместимости
string.gsub
теперь выдает ошибку, если строка замены содержитa %
, за которым следует символ, отличный от разрешенного %
или цифры.
Нет необходимости удваивать каждые %
в строке замены.См. lua-users .