删除尾随正斜杠的所有内容

时间:2018-10-18 17:10:11

标签: ruby string

以该字符串开头:

file = "[/my/directory/file-*.log]"

我想删除尾随/和方括号后的所有内容,因此返回的字符串为:

file = "[/my/directory/]"

我想知道是否有人可以推荐最安全的方法。

我一直在尝试chomp,但是我什么都没做,gsubsub似乎都不适合。

5 个答案:

答案 0 :(得分:4)

您可以使用File.dirname

File.dirname("/my/directory/file-*.log")
=> "/my/directory"

答案 1 :(得分:2)

以下是三种非正则表达式解决方案:

file[0..file.rindex('/')] << ']'

file.sub(file[file.rindex('/')+1..-2], '')

"[#{File.dirname(file[1..-2])}]"

全部返回"[/my/directory/]"

答案 2 :(得分:1)

如果卡在方括号内,则您始终可以编写一个自定义替换函数,该函数调用File.dirname

def squaredir(file)
  file.sub(/\[([^]]+)\]/) do |m|
    '[%s]' % File.dirname($1)
  end
end

然后您得到这个:

squaredir("[/my/directory/file-*.log]")
# => "[/my/directory]"

答案 3 :(得分:0)

file.split('/').take(file.split('/').size - 1).join('/') + ']'
=> "[/my/directory]"
  1. 将字符串拆分为由/分隔的字符串数组
  2. 获取除最后一个元素之外的所有数组元素
  3. 将字符串连接在一起,在它们之间重新插入/
  4. 添加结尾的]

答案 4 :(得分:-1)

file = "[/my/directory/file-*.log]"
file.sub(/^(.+)\/([^\/]+)\]/, '\1/]')
=> "[/my/directory/]"