微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何用单引号转义字符串

如何解决如何用单引号转义字符串

我试图取消引用在 Go 中使用单引号的字符串(语法与 Go 字符串文字语法相同,但使用单引号而不是双引号):

'\'"Hello,\nworld!\r\n\u1F60ANice to meet you!\nFirst Name\tJohn\nLast Name\tDoe\n'

应该变成

'"Hello,world!
?Nice to meet you!
First Name      John
Last Name       Doe

我该如何实现?

strconv.Unquote 不适用于 \n 换行符(https://github.com/golang/go/issues/15893https://golang.org/pkg/strconv/#Unquote),并且简单地 strings.ReplaceAll(ing 支持所有 Unicode 代码会很痛苦点和其他反斜杠代码,如 \n & \r & \t

我可能要求太多了,但是如果它像 strconv.Unquote 可能能够做/正在做的那样自动验证 Unicode 会很好(它知道 x Unicode 代码点可能成为一个字符) ,因为我可以用 unicode/utf8.ValidString 做同样的事情。

解决方法

@CeriseLimón 提出了这个答案,我只是将它放入一个带有更多恶作剧的函数中以支持 \n。首先,这会交换 '",并将 \n 更改为实际的换行符。然后它strconv.Unquote每行,因为strconv.Unquote无法处理换行符,然后重新交换'"并将它们拼凑在一起。

func unquote(s string) string {
        replaced := strings.NewReplacer(
            `'`,`"`,`'`,`\n`,"\n",).Replace(s[1:len(s)-1])
        unquoted := ""
        for _,line := range strings.Split(replaced,"\n") {
            tmp,err := strconv.Unquote(`"` + line + `"`)
            repr.Println(line,tmp,err)
            if err != nil {
                return nil,NewInvalidAST(obj.In.Text.LexerInfo,"*Obj.In.Text.Text")
            }
            unquoted += tmp + "\n"
        }
        return strings.NewReplacer(
            `"`,).Replace(unquoted[:len(unquoted)-1])
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?