如何在Lua中将路径名拆分为其组成部分的最简洁方式是什么?

我有一个带路径的标准 Windows 文件名。我需要从字符串中分离出文件名、扩展名和路径。

我目前只是从字符串末尾开始反向读取,寻找"."来截断扩展名,并且找到第一个 "" 来获取路径。

我确信我应该可以使用 Lua 模式来实现这一点,但当涉及从字符串右侧工作时,我总是失败。

例如: c:\temp\test\myfile.txt 应该返回:

  • c:\temp\test\
  • myfile.txt
  • txt

谢谢预先道歉如果这是一个重复的问题,但我可以找到很多其他语言的示例,但没有针对 Lua 的。

原文链接 https://stackoverflow.com/questions/5243179

点赞
stackoverflow用户227513
stackoverflow用户227513

这似乎正好做到了你想要的。

> return string.match([[c:\temp\test\myfile.txt]], "(.-)([^\\]-([^%.]+))$")
c:\temp\test\   myfile.txt  txt
2011-03-09 09:16:56
stackoverflow用户1447683
stackoverflow用户1447683

在 Lua 中如何分割字符串?

有几个可以将字符串转换为表格的函数,可以以“\”作为分隔符,因为在文件夹名称中不可能出现这个字符,所以你最终会得到一个表格,索引 1 是驱动器名称,最后一个索引是文件名称。

2012-08-30 01:16:04
stackoverflow用户1442917
stackoverflow用户1442917

这是一个改进版本,适用于 Windows 和 Unix 路径,并且处理没有点(或具有多个点的)文件:

= string.match([[/mnt/tmp/myfile.txt]], "(.-)([^\\/]-%.?([^%.\\/]*))$")
"/mnt/tmp/" "myfile.txt"    "txt"

= string.match([[/mnt/tmp/myfile.txt.1]], "(.-)([^\\/]-%.?([^%.\\/]*))$")
"/mnt/tmp/" "myfile.txt.1"  "1"

= string.match([[c:\temp\test\myfile.txt]], "(.-)([^\\/]-%.?([^%.\\/]*))$")
"c:\\temp\\test\\"  "myfile.txt"    "txt"

= string.match([[/test.i/directory.here/filename]], "(.-)([^\\/]-%.?([^%.\\/]*))$")
"/test.i/directory.here/"   "filename"  "filename"
2012-08-30 06:40:20