Использование string.gsub для наиболее эффективного изменения x на y (Lua) - PullRequest
2 голосов
/ 10 октября 2011

Я в растерянности, хотя я все больше и больше знакомлюсь с gsub в Lua.Вероятно, есть лучший способ сделать это более эффективно, и это то, что я ищу.То, что я хочу сделать, это изменить:

\(port Planes)9e;\(enter pool)n2euw

на

port Planes;run 9e;enter pool;run n2euw

Кажется, что это было бы просто, но я полностью рисую пробел.Я мог бы, вероятно, приписать это отчасти истощению, но на самом деле это не оправдание.Я бы сказал так:

string.gsub(variable, ";","\(")
string.gsub(variable, "\(", ";")
string.gsub(variable, ")",";run")
string.gsub(variable, ";;",";")

Но для меня это выглядит довольно неаккуратно и не так эффективно, как хотелось бы мне.Это также создает проблему, если ")" заканчивает строку, и ставит ";"там, чего я не хочу.Я был бы признателен за опыт кого-то более знакомого с Lua, который может привести в порядок это и сделать его более эффективным.Я включу это в функцию, как только все будет сказано и сделано.Спасибо!

Редактировать: После тестирования это даже не работает, во всяком случае ... и я не могу определить правильную последовательность сопоставления с образцом, чтобы использовать его, чтобы он работал вообще ...

1 Ответ

2 голосов
/ 10 октября 2011

Не зная больше о возможных комбинациях, которые вы могли бы иметь, я не могу сказать, что это будет работать в каждом случае, но это должно дать начало:

string.gsub(variable,"\\%((.-)%)","%1;run ")
string.gsub(variable,";run $","")

Первый gsub возвращает команды в круглых скобках, удаляя круглые скобки и добавляя «; run» в конце.

Второй проверяет, является ли конец строки '; run', и заменяет его в этом случае.

Вам также следует ознакомиться с этой статьей, где приведена хорошая сводка шаблонов: http://www.lua.org/pil/20.2.html

...