abc.txt 的这种会 File.basename(file,File.extname(file)) abc.tar.gz 文件名 abc abc.v1.tar.gz 文件名 abc.v1 后面两种怎么取正确啊?
abc.txt
File.basename(file,File.extname(file))
abc.tar.gz
abc
abc.v1.tar.gz
abc.v1
帮你顶一下哈!
我也是新手,来个笨的 “abc.tar.gz".scan(/(\w+)./).frist.first
#2 楼 @feitian124 有局限,第三种不行
这种就得不到了 abc.v1.tar.gz 文件名 abc.v1
应该没法了吧 我觉得不用太执着,file.split(".").first 算了
只要有个表可以 match 出 extension filename,然后在源文件名基础上移除匹配到的 ext name,就可以了。应该有一些 gem 是可以通过文件的 ext name 来判断文件的 mimetype 的,楼主可以从这个地方入手看能不能抽离出一套文件扩展名总表。
a = %w{ tar gz txt } def basename(file_name, arr) names = file_name.split('.') name = File.basename(names.shift) ts = names.select { |x| not arr.include? x } ts.empty? ? name : name + '.' + ts.join('.') end puts basename('abc.tar.gz', a) puts basename('abc.v1.tar.gz', a)
代码应该可以再简洁的
另一个版本
a = %w{ .tar .gz .txt } def basename(file_name, arr) file_name = File.basename file_name while(true) name = file_name.scan(/\.\w+$/).first arr.include?(name) ? file_name.gsub!(name, '') : break end file_name end puts basename('/User/abc.tar.gz', a) puts basename('abc.v1.tar.gz', a)
File.basename("abc.tar.gz",".tar.gz")