I have a standard Windows Filename with Path. I need to split out the filename, extension and path from the string.
I am currently simply reading the string backwards from the end looking for . to cut off the extension, and the first \ to get the path.
I am sure I should be able to do this using a Lua pattern, but I keep failing when it comes to working from the right of the string.
eg. c:\temp\test\myfile.txt should return
- c:\temp\test\
- myfile.txt
- txt
Thank you in advance apologies if this is a duplicate, but I could find lots of examples for other languages, but not for Lua.
> return string.match([[c:\temp\test\myfile.txt]], "(.-)([^\\]-([^%.]+))$")
c:\temp\test\ myfile.txt txt
This seems to do exactly what you want.
Here is an improved version that works for Windows and Unix paths and also handles files without dots (or files with multiple dots):
= 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"
There is a few string to table functions there, split "\" as \ cant be in a folder name anyway so you'll end up with a table with index one being the drive and the last index being the file.
来源:https://stackoverflow.com/questions/5243179/what-is-the-neatest-way-to-split-out-a-path-name-into-its-components-in-lua