Go 如何拆分字符串,但将分隔符保留为单独的元素

Go 如何拆分字符串,但将分隔符保留为单独的元素,go,Go,我有几个包含各种符号的字符串,如以下两个示例: z=y+x @symbol 我想要分割字符串,这样我就有了结果切片: [z = y + x] [@ symbol] 我看过并尝试过几件事: 我已经看过了,但是golang似乎不支持 我知道这是使用strings.SplitAfter实现的,但我希望将分隔符作为单独的元素 我尝试用一些变体(例如“~+~”)替换符号(例如“+”),并对周围的字符(例如“~”)进行拆分,但这种解决方案远远不够优雅,如果需要根据符号()进行条件替换,就会遇到问题

我有几个包含各种符号的字符串,如以下两个示例:

z=y+x

@symbol
我想要分割字符串,这样我就有了结果切片:

[z = y + x]

[@ symbol]
我看过并尝试过几件事:

  • 我已经看过了,但是golang似乎不支持

  • 我知道这是使用strings.SplitAfter实现的,但我希望将分隔符作为单独的元素

  • 我尝试用一些变体(例如“~+~”)替换符号(例如“+”),并对周围的字符(例如“~”)进行拆分,但这种解决方案远远不够优雅,如果需要根据符号()进行条件替换,就会遇到问题


  • 也许我误解了前面的一些问题以及它们各自的解决方案。

    我使用了Go的strings.Split实现的修改版本

    func测试(te*testing.T){
    t:=新测试仪(te)
    t、 Assert().Equal(splitCharsInclusive(“z=y+x”、“=+”)、[]字符串{“z”、“=”、“y”、“+”、“x”})
    t、 Assert().Equal(splitCharsInclusive(“@symbol”,“@”),[]字符串{”、“符号”})
    }
    func splitCharsInclusive(s,chars字符串)(out[]字符串){
    为了{
    m:=字符串。索引(s,字符)
    如果m<0{
    打破
    }
    out=append(out,s[:m],s[m:m+1])
    s=s[m+1:]
    }
    out=追加(out,s)
    返回
    }
    
    这仅限于要拆分的单个字符。而传递类似于
    splitCharsInclusive((z)(y)(x)”,“()”
    的内容可能无法获得所需的输出,因为在响应中会得到一些空字符串。但希望这是您所需修改的一个良好起点


    另外,我链接的Go版本提前计算输出数组的长度,这是一个很好的优化,我决定省略它,但可能最好再添加回去

    我说的对吗,你们只是想把字符串转换成数组?分裂集已知吗?你想把它传递给分裂函数吗?@GrigoriyMikhalkin是的correct@icza是的,比如说现在它包括[@,+,=]