修剪最后斜杠右边的多个字符,包括斜杠

时间:2015-11-05 19:14:55

标签: go

Golang没有php所具有的strrchr功能。如果我想从这个字符串中删除/path(包括最后的斜杠),那么如何在golang中删除它?

 mystr := "/this/is/my/path" 

期望的输出

"/this/is/my"

我可以像这样得到最终斜杠的索引

lastSlash := strings.LastIndex(mystr, "/")

但我不确定如何创建删除了/path的新字符串。怎么做?

3 个答案:

答案 0 :(得分:3)

尝试output := mystr[:strings.LastIndex(mystr, "/")]

mystr := "/this/is/my/path" 
idx := strings.LastIndex(mystr, "/")
if idx != -1{
  mystr = mystr[:idx]
}

fmt.Println(mystr)

playground link

答案 1 :(得分:3)

captncraig的答案适用于任何类型的分隔符char,但假设你在POSIX风格的机器上运行(" /"是路径分隔符),你操作的确实是路径:

http://play.golang.org/p/oQbXTEhH30

package main

import (
    "fmt"
    "path/filepath"
)

func main() {
    s := "/this/is/my/path"
    fmt.Println(filepath.Dir(s))

    // Output: /this/is/my
}

来自godoc(https://golang.org/pkg/path/filepath/#Dir):

  

Dir返回除路径的最后一个元素之外的所有元素,通常是路径的目录。删除最后一个元素后,路径将被清除并删除尾部斜杠。

虽然如果您使用/path运行它,它将返回/,这可能是您想要的,也可能不是。

答案 2 :(得分:0)

以前(非常令人满意的)解决方案未涵盖的一个角落案例是尾随/。即 - 如果您希望/foo/bar/quux/修剪为/foo/bar而不是/foo/bar/quux。这可以通过regexp库完成:

mystr := "/this/is/my/path/"
trimpattern := regexp.MustCompile("^(.*?)/[^/]*/?$")
newstr := trimpattern.ReplaceAllString(mystr, "$1")

fmt.Println(newstr)

这里有一个更全面的例子:http://play.golang.org/p/ii-svpbaHt