修剪字符串的后缀或扩展名?

时间:2012-10-23 09:57:30

标签: string go

例如,我有一个字符串,由“sample.zip”组成。如何使用strings包或其他方法删除“.zip”扩展名?

5 个答案:

答案 0 :(得分:163)

尝试:

basename := "hello.blah"
name := strings.TrimSuffix(basename, filepath.Ext(basename))

TrimSuffix基本上告诉它去掉尾随的字符串,这是带点的扩展名。

TrimSuffix docu here

答案 1 :(得分:52)

编辑:Go继续前进。请参阅Keith's answer

使用path/filepath.Ext获取扩展程序。然后,您可以使用扩展名的长度来检索子字符串减去扩展名。

var filename = "hello.blah"
var extension = filepath.Ext(filename)
var name = filename[0:len(filename)-len(extension)]

或者您可以使用strings.LastIndex来查找最后一个句点(。),但这可能会更加脆弱,因为filepath.Ext会处理您可能的边缘情况(例如没有扩展名)需要显式编码,或者Go是否使用除了句点之外的扩展分隔符的理论O / S.

答案 2 :(得分:1)

这种方式也有效:

var filename = "hello.blah"
var extension = filepath.Ext(filename)
var name = TrimRight(filename, extension)

但也许Paul Ruane的方法效率更高?

答案 3 :(得分:0)

以下示例不需要path/filepathfunc BaseName(s string) string { n := strings.LastIndexByte(s, '.') if n == -1 { return s } return s[:n] }

TrimSuffix

,它似乎也比PS C:\> go test -bench . goos: windows goarch: amd64 BenchmarkTrimFile-12 166413693 7.25 ns/op BenchmarkTrimPath-12 182020058 6.56 ns/op BenchmarkLast-12 367962712 3.28 ns/op 快:

df.replace(['None', 'nan'], np.nan, inplace=True)

Setting up jasmine reporter

答案 4 :(得分:-1)

我正在使用go1.14.1,filepath.Ext对我不起作用,path.Ext对我来说很好

var fileName = "hello.go"
fileExtension := path.Ext(fileName)
n := strings.LastIndex(fileName, fileExtension)
fmt.Println(fileName[:n])

游乐场:https://play.golang.org/p/md3wAq_obNc

文档加密:https://golang.org/pkg/path/#Ext