删除Golang中的周围双引号或单引号

时间:2018-01-25 18:02:00

标签: string go

strconv.Unquote不应该同时处理单引号和双引号吗?

另见https://golang.org/src/strconv/quote.go - 第350行

但是,以下代码会返回syntax error

s, err := strconv.Unquote(`'test'`)
if err != nil {
  fmt.Println(err)
} else {
  fmt.Println(s)
}

https://play.golang.org/p/TnprqhNdwD1

但双引号按预期工作:

s, err := strconv.Unquote(`"test"`)
if err != nil {
  fmt.Println(err)
} else {
  fmt.Println(s)
}

我错过了什么?

3 个答案:

答案 0 :(得分:3)

标准库中没有现成的功能。

您提出的内容有效,但我们可以使其更简单(也可能更有效):

func trimQuotes(s string) string {
    if len(s) >= 2 {
        if c := s[len(s)-1]; s[0] == c && (c == '"' || c == '\'') {
            return s[1 : len(s)-1]
        }
    }
    return s
}

测试它:

fmt.Println(trimQuotes(`'test'`))
fmt.Println(trimQuotes(`"test"`))
fmt.Println(trimQuotes(`"'test`))

输出(在Go Playground上尝试):

test
test
"'test

答案 1 :(得分:1)

strconv.Unquote可以正确处理单引号和双引号,但不能以您的代码段调用它的方式使用它。它适用于处理源代码并遇到字符串文字的情况。单引号大小写对单个字符有效,而不是字符串。在go源文件中,如果尝试对多字符字符串文字使用单引号,则会得到类似于illegal rune literal的编译器错误。

如果要从字符串的开头和结尾删除引号,您可以使用strings.Trim函数来处理它。

s := strings.Trim(`'test'`, `'"`)
fmt.Println(s)

答案 2 :(得分:-1)

临时解决方法:

d3dx11