You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Lua中一次性去除字符串中的路径与文件扩展名?

一次匹配获取不含路径和扩展名的文件名

当然可以用单次string.match实现,结合Lua正则的特性,直接用下面的正则表达式就能完成需求:

local path = "C:/Users/mail/Desktop/Something/Test.mp3"
local filename = string.match(path, ".*[/\\](.+)%.[^.]+$")
print(filename) -- 输出: Test

正则解释:

  • .*[/\\]:匹配路径中最后一个正斜杠(/)或反斜杠(\)之前的所有内容(Lua里正则的\\是转义后的反斜杠,用来匹配Windows路径中的反斜杠)
  • (.+):贪婪捕获最后一个斜杠后、最后一个点(.)之前的所有字符——这就是我们要的不含扩展名的文件名
  • %.[^.]+$:匹配最后一个点及其后面的扩展名部分,确保捕获的内容截止到最后一个点之前

兼容场景测试:

  • 相对路径:输入"Doc.pdf",输出"Doc"
  • 含多个点的文件名:输入"C:/Files/Report.v2.pdf",输出"Report.v2"
  • Windows反斜杠路径:输入"C:\\Users\\Docs\\Note.txt",输出"Note"

如果需要兼容无扩展名的文件(比如"C:/Files/Readme"),可以调整正则为:

local filename = string.match(path, ".*[/\\]([^/\\.]+)$")

这个正则会捕获最后一个斜杠后所有非斜杠、非点的字符,不过这会和你原本两次匹配的逻辑略有差异——原本的逻辑在无扩展名时会返回nil,而这个正则会返回文件名本身。

内容的提问来源于stack exchange,提问作者JimPancakes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 13:05:01