我正在尝试使用Lua将某个通配符字符串替换为另一个字符串。 这可能并不清楚,这是我的例子:
如果我有一个目录字符串:
C:\可能更改dir名称\另一个更改名称\已知实体文件夹\ workingDir
最终会像这样:
C:\ ROOT \ workingDir
允许我替换根目录和当前目录之间的字符串的东西。因此,将替换粗体目录字符串。请记住,目录是可变的,这就是为什么它需要有一个通配符来替换。所以基本上我知道2个“锚”字符串,但其间的所有内容都是未知/可变的。
更新:字符串的存储方式如下:“c:\\ program files(x86)\\”会反复使用反斜杠吗?
答案 0 :(得分:1)
您可以使用Lua patterns ..
假设“已知固体文件夹”是常量, 您可以使用以下模式
local str = "C:\\ possible changed dir name \\ another change name \\ known solid folder \\ workingDir"
local toFind = "(C:\\).*(known solid folder)"
local toReplace = "C:\\ ROOT"
str = str:gsub(toFind,toReplace)
toFind变量中的.*
是您的外卡。它给出了“C:\”和“已知实体文件夹”之间的所有字符
答案 1 :(得分:0)
如果你知道前缀(" C:\")和后缀(" \ workingDir"),为什么不返回 "C:\\ROOT\\workingDir"
?
简单的替换应该有效,但是当"已知的固体文件夹"时,您可能需要小心。包括模板中具有特殊含义的字符:
function root(path, known_folder)
local function q(s) return s:gsub('([%(%)%.%%%+%-%*%?%[%^%$%]])','%%%1') end
return (path:gsub("^(%w:\\).+"..q(known_folder), "%1ROOT"))
end
print(root([[C:\possible...\another change...\known solid folder\workingDir]],
"known solid folder"))
这会打印C:\ROOT\workingDir
。