【问题标题】:What is the neatest way to split out a Path Name into its components in Lua在 Lua 中将路径名称拆分为其组件的最简洁方法是什么
【发布时间】:2011-07-11 17:17:01
【问题描述】:

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

我目前只是从末尾向后读取字符串以查找 .切断扩展名,第一个 \ 得到路径。

我确信我应该能够使用 Lua 模式来做到这一点,但是在从字符串右侧工作时我总是失败。

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

  • c:\temp\test\
  • 我的文件.txt
  • txt

如果这是重复的,请提前道歉,但我可以找到很多其他语言的示例,但不是 Lua。

【问题讨论】:

  • 我认为只是向后读取字符串是一种更好的方法 - 在这种情况下,模式匹配是多余的,运行速度可能会慢 10 倍,并且一旦你处于维护状态,忘记了代码的每一个细节。

标签: lua lua-patterns


【解决方案1】:

这是一个改进版本,适用于 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"

【讨论】:

    【解决方案2】:
    > return string.match([[c:\temp\test\myfile.txt]], "(.-)([^\\]-([^%.]+))$")
    c:\temp\test\   myfile.txt  txt
    

    这似乎正是你想要的。

    【讨论】:

    • 非常感谢,你不想知道我玩了多久匹配字符串,我会通过你的答案来了解它是如何工作的。
    • @Jane:需要注意的重要事项是非贪婪的- 及其位置。
    【解决方案3】:

    Split string in Lua?

    那里有一些用于表函数的字符串,将“\”拆分为 \ 无论如何都不能在文件夹名称中,因此您最终会得到一个表,其中索引一是驱动器,最后一个索引是文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-24
      • 2020-11-09
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      相关资源
      最近更新 更多