如何仅在高俚语中的引号之外时才拆分字符?

我需要在符号上拆分一大块文本,但只有当它位于单引号之外时。文本将如下所示:+

Some.data:'some+value'+some.more.data:9+yet.more.data:'rock+roll'

它应该成为三个值的切片:

  • 一些数据:“一些+价值”

  • 更多 数据:9

  • 然而,更多数据:“摇滚乐”

我发现类似的问题使用正则表达式来做到这一点,但这需要向前看,这是golang正则表达式引擎所没有的。

我还在没有前瞻的情况下创建自己的正则表达式:

'.*?'(\+)|[^']*(\+)

但是,这似乎在第三项上分崩离析,它在in上分裂。+'rock+roll'

我考虑过可能做一个字符串拆分,然后验证每个切片以确保它不是部分表达式,然后如果是,则将碎片拼接在一起,但它将相当复杂,如果可能的话,我想避免它。+

目前,我认为最好的解决方案是识别引号内的文本(我可以很容易地用正则表达式做到这一点),要么对该文本进行URL编码,要么用加号做其他事情,拆分文本,然后URL解码表达式以取回引号内的符号,但我想知道是否有更好的方法。+

有谁知道一种方法可以使用正则表达式在引号之外的符号上拆分而不进行前瞻?有谁能想到比我的URL编码/解码方法更简单的解决方案?+


梦里花落0921
浏览 83回答 1
1回答

GCT1015

纯代码可以更容易:func split(s string) []string {    var result []string    inquote := false    i := 0    for j, c := range s {        if c == '\'' {            inquote = !inquote        } else if c == '+' && !inquote {            result = append(result, s[i:j])            i = j +1        }    }    return append(result, s[i:])}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go