Другие ответы предоставляют хорошие решения для фактического удаления строк из строки, но не объясняют, почему ваш код этого не делает.
Переформатировав для наглядности, вы написали:
for line in result:gmatch"<Table [^\n]*" do
line = ""
end
Первая часть - разумный способ перебрать result
и извлечь все отрезки текста, которые начинаются с <Table
и продолжаются до следующего символа новой строки, но не включая его. Итератор, возвращаемый gmatch
, возвращает копию совпадающего текста при каждом вызове, а локальная переменная line
содержит эту копию для тела цикла for
.
Поскольку соответствующий текст копируется в line
, изменения, внесенные в line
, не изменяют и не могут изменять фактический текст, хранящийся в result
.
Это связано с более фундаментальным свойством строк Lua. Все строки в Lua неизменяемы. После сохранения они не могут быть изменены. Переменные, содержащие строки, фактически содержат указатель на внутреннюю таблицу неизменяемых строк с подсчетом ссылок, которая допускает только две операции: интернализацию новой строки и удаление интернализованной строки без оставшихся ссылок.
Таким образом, любой подход к редактированию содержимого строки, хранящейся в result
, потребует создания совершенно новой строки. Если string.gmatch
обеспечивает итерацию по содержимому, но не позволяет его изменять, string.gsub
обеспечивает создание новой строки, в которой весь текст, соответствующий шаблону, был заменен чем-то новым. Но даже string.gsub
не меняет неизменный исходный текст; он создает новую неизменяемую строку, которая является копией старой с выполненными заменами.
Использование gsub
может быть таким простым:
result = result:gsub("<Table [^\n]*", "")
но это выявит другие дефекты самого рисунка. Во-первых, и это наиболее очевидно, ничто не требует, чтобы шаблон совпадал только с началом строки. Во-вторых, шаблон не включает новую строку, поэтому строка останется пустой.
Все это можно улучшить, осторожно и грамотно используя библиотеку шаблонов. Но это не меняет того факта, что вы начинаете с текста XML и не обрабатываете его с помощью инструментов, поддерживающих XML. В этом случае любой подход, основанный на сопоставлении с образцом или даже на регулярных выражениях, скорее всего, закончится плачевно.
person
RBerteig
schedule
07.10.2013
&
экранирование,<!--
комментарии, пробел< Table
и т. Д. (Точно так же я также настоятельно рекомендую использовать инструмент, поддерживающий XML, для генерации вашего XML по тем же причинам). - person hugomg   schedule 07.10.2013