使用字符串函数gsub在Lua中最有效地将x更改为y

我现在很茫然,虽然我越来越熟悉Lua中的gsub。可能有更好的方法来更有效地做到这一点,这就是我想要的。我想要做的是改变:

\(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的专家能够整理一下,并使其更有效。完成后,我将把它放入一个函数中。谢谢!

编辑:测试后,它甚至根本没有用......我无法弄清楚要使用哪个正确的模式匹配序列才能将其完全解决......

原文链接 https://stackoverflow.com/questions/7706718

点赞
stackoverflow用户795299
stackoverflow用户795299

不知道你可能有哪些组合,我无法说这一定适用于每种情况,但这应该能够让你启动:

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

第一个 gsub 返回括号内的命令,删除括号并在末尾添加';run '。

第二个 gsub 检查字符串的结尾是否为';run ',如果是,则替换它。

你还应该查看这篇文章,其中包含了有关模式的简要摘要: http://www.lua.org/pil/20.2.html

2011-10-10 03:52:02