2014-10-10 47 views
0

我确定这是非常明显的,但我似乎无法得到它的工作。 我有一个Pathname实例,并试图从它删除第一个目录,然后返回字符串的其余部分,但由于切片返回部分删除似乎没有办法让较小的字符串回来。执行完string.slice()后返回的字符串与部分删除

filepath = Pathname.new("this_folder_needs_to_go/another_folder/file.html") 
filedir = filepath.to_s.slice("this_folder_needs_to_go/") 
newfilepath = filedir 

我希望newfilepathanother_folder/file.html而是它只返回this_folder_needs_to_go/

因此,如何在地球上,我得到的已移除部分的字符串?

回答

2

使用String#split

"this_folder_needs_to_go/another_folder/file.html".split('/', 2)[1] 
# => "another_folder/file.html" 
+0

如果路径长度每变化一次,那么该怎么办? – 2014-10-10 13:27:40

+0

@SamMason,是的,上面的表达式通过'/'将字符串分成两部分,得到第二部分。 – falsetru 2014-10-10 13:28:49

1

您还可以使用.slice!而不是.slice如果你试图修改你的字符串

filepath = Pathname.new("this_folder_needs_to_go/another_folder/file.html") 
filepath.to_s.slice!("this_folder_needs_to_go/") 
puts filepath ==> "another_folder/file.html" 

虽然这会影响你的文件路径变量不可逆转。

0

#partition还将以类似的方式工作,以#split

filepath = Pathname.new("this_folder_needs_to_go/another_folder/file.html") 
file_dir = filepath.partition("this_folder_needs_to_go/")[-1] 
file_dir 
#=> "another_folder/file.html" 

#partition返回[头,月,尾]所以这看起来像["","this_folder_needs_to_go","/another_folder/file.html"][-1]说拿到最后一个元素。