例如,我有一个字符串,由“sample.zip”组成。如何使用strings包或其他方法删除“.zip”扩展名?
答案 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/filepath
或func 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)
答案 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])