我如何在lua中对这个字符串进行模式匹配?



我有一个包含文件路径的字符串:

C:Usersuserdirectorybuild.bat

是否有一种方法可以删除最后一个反斜杠和第二个反斜杠之间的单词(在本例中是directory),但是我想有一种方法可以多次执行此操作:

第一次运行代码时,路径应该是这样的:

C:Usersuserbuild.bat

如果我在第一次运行程序时得到的新字符串上运行代码,输出应该是这样的:

C:Usersbuild.bat

是的,这是非常可能的。我建议使用以下模式:

^(.+).-(.-)$-这将匹配整个路径,首先将目录匹配到父目录,然后匹配文件名。使用方法如下:

local function strip_parent_dir(path)
local path_to_parent, filename = path:match[[^(.+).-(.-)$]]
return path_to_parent .. "\" .. filename
end

可以这样使用:

print(strip_parent_dir[[C:Usersuserdirectorybuild.bat]]) -- C:Usersuserbuild.bat
print(strip_parent_dir(strip_parent_dir[[C:Usersuserdirectorybuild.bat]])) -- C:Usersbuild.bat

另一个选项是用路径分隔符(反斜杠)分隔路径,将各个部分插入到表中,然后删除倒数第二个条目,最后将各个部分连接起来;这稍微长一些,但可能被认为更具可读性(并且可能具有更好的渐近性能):

local function strip_parent_dir(path)
local parts = {}
for part in path:gmatch"[^\]+" do
table.insert(parts, part)
end
table.remove(parts, #parts - 1)
return table.concat(parts, "\")
end

的结果是相同的。选择你认为更容易读懂的。

最新更新