如何从Golang中的字符串中删除引号

时间:2017-05-27 23:46:29

标签: go

我在Golang中有一个由引号括起来的字符串。我的目标是删除边上的所有引号,但忽略字符串内部的所有引号。我该怎么做呢?我的直觉告诉我使用像C#中的RemoveAt函数,但我在Go中看不到类似的东西。

例如:

"hello""world"

应转换为:

hello""world

为进一步澄清,请:

"""hello"""

会变成这样:

""hello""

因为只应移除外部的那些。

5 个答案:

答案 0 :(得分:21)

使用slice expression

s = s[1 : len(s)-1]

如果引号可能不存在,请使用:

if len(s) > 0 && s[0] == '"' {
    s = s[1:]
}
if len(s) > 0 && s[len(s)-1] == '"' {
    s = s[:len(s)-1]
}

playground example

答案 1 :(得分:2)

您可以利用切片删除切片的第一个和最后一个元素。

package main

import "fmt"

func main() {
    str := `"hello""world"`

    if str[0] == '"' {
        str = str[1:]
    }
    if i := len(str)-1; str[i] == '"' {
        str = str[:i]
    }

    fmt.Println( str )
}

由于切片共享底层内存,因此不会复制该字符串。它只是更改str切片以开始一个字符,并更快结束一个字符。

这就是the various bytes.Trim functions的工作方式。

答案 2 :(得分:2)

使用slice expressions。您应该编写可靠的代码,为不完美的输入提供正确的输出。例如,

package main

import "fmt"

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

func main() {
    tests := []string{
        `"hello""world"`,
        `"""hello"""`,
        `"`,
        `""`,
        `"""`,
        `goodbye"`,
        `"goodbye"`,
        `goodbye"`,
        `good"bye`,
    }

    for _, test := range tests {
        fmt.Printf("`%s` -> `%s`\n", test, trimQuotes(test))
    }
}

输出:

`"hello""world"` -> `hello""world`
`"""hello"""` -> `""hello""`
`"` -> `"`
`""` -> ``
`"""` -> `"`
`goodbye"` -> `goodbye"`
`"goodbye"` -> `goodbye`
`goodbye"` -> `goodbye"`
`good"bye` -> `good"bye`

答案 3 :(得分:1)

Strings.trim()可用于从字符串中删除开头和结尾的空格。如果在字符串之间使用双引号,则不会起作用。

Property 'id' does not exist on type 'Maybe<HostelId>[]'.

游乐场链接-https://play.golang.org/p/x_DG9vHvzY

答案 4 :(得分:0)

使用正则表达式的单行代码...

quoted = regexp.MustCompile(`^"(.*)"$`).ReplaceAllString(quoted,`$1`)

但是它不一定按照您希望的方式处理转义引号。

https://cssnano.co/optimisations/

翻译自The Go Playground