问题
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.
回答1:
> return string.match([[c:\temp\test\myfile.txt]], "(.-)([^\\]-([^%.]+))$")
c:\temp\test\ myfile.txt txt
This seems to do exactly what you want.
回答2:
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"
回答3:
Split string in Lua?
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