如何在没有扩展名的情况下获取文件名?例如,"test.html.erb"应为"test"
类似的问题.然而,
> File.basename("test.html.erb", ".*")
=> "test.html"
Run Code Online (Sandbox Code Playgroud)
编辑:上面的代码是我未能尝试产生所需的结果.我知道我错误地使用File.basename.因此,我发布了这个问题.当我说没有扩展名的文件名时,我的意思是我不关心第一个点之后的东西.我想要返回的名字没有点.另外,在实际代码中我将传入__FILE__而不是"test.html.erb".
Зел*_*ный 37
阅读文档:
basename(file_name [, suffix] ) ? base_name
返回file_name中给出的文件名的最后一个组件,当File :: ALT_SEPARATOR不为nil时,可以使用File :: SEPARATOR和File :: ALT_SEPARATOR作为分隔符.如果给出后缀并出现在file_name的末尾,则将其删除.
=> File.basename('public/500.html', '.html')
=> "500"
Run Code Online (Sandbox Code Playgroud)
在你的情况下:
=> File.basename("test.html.erb", ".html.erb")
=> "test"
Run Code Online (Sandbox Code Playgroud)
fgu*_*len 22
如果您不知道扩展名,可以File.basename与File.extname以下内容结合使用:
filepath = "dir/dir/filename.extension"
File.basename(filepath, File.extname(filepath)) #=> "filename"
Run Code Online (Sandbox Code Playgroud)
and*_*otn 20
Pathname提供了一个方便的面向对象的接口来处理文件名.
一种方法允许您用新的扩展替换现有扩展,并且该方法接受空字符串作为参数:
>> Pathname('foo.bar').sub_ext ''
=> #<Pathname:foo>
>> Pathname('foo.bar.baz').sub_ext ''
=> #<Pathname:foo.bar>
>> Pathname('foo').sub_ext ''
=> #<Pathname:foo>
Run Code Online (Sandbox Code Playgroud)
这是一种方便的方法来获取文件名被剥离的扩展名(如果有的话).
但是如果你想摆脱所有扩展,你可以使用正则表达式:
>> "foo.bar.baz".sub(/\..*/, '')
=> "foo"
Run Code Online (Sandbox Code Playgroud)
按点分割,第一部分就是你想要的.
filename = 'test.html.erb'
result = filename.split('.')[0]
Run Code Online (Sandbox Code Playgroud)
感谢@xdazz 和@Monk_Code 的想法。如果其他人正在寻找,我使用的最终代码是:
File.basename(__FILE__, ".*").split('.')[0]
Run Code Online (Sandbox Code Playgroud)
这通常允许您删除文件前面的完整路径和后面的扩展名,只给出文件名,不带任何点或斜杠。
| 归档时间: |
|
| 查看次数: |
22270 次 |
| 最近记录: |