1

我正在尝试使用 Lua 将某个通配符字符串替换为另一个字符串。这可能不清楚,这是我的例子:

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

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

它最终会是这样的:

C:\根\工作目录

可以让我替换根目录和当前目录之间的字符串的东西。所以粗体目录字符串将被替换。请记住目录是可变的,这就是为什么它需要有一个通配符来替换。所以基本上我知道2个“锚”字符串,但两者之间的一切都是未知/可变的。

更新:字符串是这样存储的:“c:\\program files (x86)\\”会双反斜杠影响替换吗?

4

2 回答 2

1

您可以使用Lua 模式..

假设“已知实体文件夹”是一个常数,您可以使用以下模式

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:\" 和 "known solid folder" 之间的所有字符

于 2012-12-04T02:57:34.073 回答
0

"C:\\ROOT\\workingDir"如果您知道前缀(“C:\”)和后缀(“\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

于 2012-12-04T03:37:40.130 回答