我有一个包含文件路径的字符串:
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
的结果是相同的。选择你认为更容易读懂的。