Lua字符串替换通配符

我正在尝试使用Lua将某个通配符字符串替换为另一个字符串。

以下是我的示例:

如果我有一个目录的字符串:

C:\可能更改的目录名称\另一个更改名称\已知的实心文件夹\工作目录

它将变成这样:

C:\ROOT\workingDir

我需要有一种方法可以替换根目录和当前目录之间的字符串。所以从粗体目录字符串被替换。请记住,目录是可变的,这就是为什么需要有一个通配符来替换。基本上,我知道2个“锚点”字符串,但中间的所有内容都是未知/可变的。

更新:字符串存储方式如下:“c:\\程序文件(x86)\\”会双重反斜杠影响替换吗?

点赞
用户1137788
用户1137788

你可以使用 Lua patterns

假设“已知的固定文件夹”是一个常量,您可以使用以下模式:

local str = "C:\\可能更改的目录名称\\另一个更改的名称\\已知的固定文件夹\\工作目录"
local toFind = "(C:\\).*(已知的固定文件夹)"
local toReplace = "C:\\ ROOT"

str = str:gsub(toFind,toReplace)

toFind 变量中的 .* 是通配符。 它给出了“C:\”和“已知的固定文件夹”之间的所有字符。

2012-12-04 02:57:34
用户1442917
用户1442917

如果您已经知道前缀("C:\")和后缀("\workingDir"),那么为什么不返回 "C:\ROOT\workingDir" 呢?

简单的替换应该可以,但是当 “known solid folder” 包含在模板中具有特殊含义的字符时,您需要小心:

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

2012-12-04 03:37:40