Lua从路径中删除第一个目录

Posted

技术标签:

【中文标题】Lua从路径中删除第一个目录【英文标题】:Lua remove first directory from path 【发布时间】:2021-01-30 14:30:55 【问题描述】:

如何从路径字符串中删除第一个目录(如果存在)?

我用gsubstring.match 尝试了几次,但我无法正常工作。

输入:

/
/tmp/file.txt
/tmp/folder/file2.txt
/tmp/folder/.../file3.txt

输出:

/
/file.txt
/folder/file2.txt
/folder/.../file3.txt

【问题讨论】:

【参考方案1】:
local paths = 
    '/',
    '/tmp/file.txt',
    '/tmp/folder/file2.txt',
    '/tmp/folder/.../file3.txt'


for _, path in ipairs (paths) do
    local trimmed = path:gsub ('^/[^/]+', '')
    print (trimmed)
end

必要的正则表达式是^/[^/]+。它被锚定到字符串的开头,并且后面至少需要一个非斜线字符,这样/ 就不会匹配。

【讨论】:

【参考方案2】:
#! /usr/bin/env lua

dirsep = package .config :sub( 1, 1 )
cwd = '/tmp/folder/file2.txt'
delimeter =  cwd :find( dirsep, 2 ) 
subdir = cwd :sub( delimeter [1] or 1 )

print( subdir )

/文件夹/file2.txt

【讨论】:

请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助,质量更高,更有可能吸引投票。 我使用了变量名来解释发生了什么。 dirsep 是目录分隔符。 cwd 是当前工作目录。分隔符从字面上找到分隔符。 subdir 是子目录。这怎么很难理解? 命名良好的变量并不能说明您的代码的作用、工作方式和原因。

以上是关于Lua从路径中删除第一个目录的主要内容,如果未能解决你的问题,请参考以下文章

从绝对路径中删除文件

Lua_第16 章 Weak 表

LUA:如何正确读取带有重音字母和变音符号的 UFT8 文件名和路径?

第一个Lua程序

Lua从请求uri中删除文件路径中的文件夹

第2课 Hello, Lua!