gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:15:00 25 4
gpt4 key购买 nike

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

z=y+x

@symbol

我想分割字符串,以便得到结果 slice :
[z = y + x]

[@ symbol]

我查看并尝试过的一些方法:
  • 我看过了这个question,但似乎golang不支持lookarounds
  • 我使用strings.SplitAfter知道此solution exists,但我希望将分隔符作为单独的元素使用。
  • 我尝试用某种变体(例如“〜+〜”)替换符号(例如“+”),并对周围的字符(例如“〜”)进行分割,但是这种解决方案远非优雅,如果我需要根据符号(which golang doesn't seem to support either)进行条件替换。

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

    最佳答案

    我使用了Go字符串的修改版。split实现https://golang.org/src/strings/strings.go?s=7505:7539#L245

    func Test(te *testing.T) {
    t := tester.New(te)
    t.Assert().Equal(splitCharsInclusive("z=y+x", "=+"), []string{"z", "=", "y", "+", "x"})
    t.Assert().Equal(splitCharsInclusive("@symbol", "@"), []string{"", "@", "symbol"})

    }

    func splitCharsInclusive(s, chars string) (out []string) {
    for {
    m := strings.IndexAny(s, chars)
    if m < 0 {
    break
    }
    out = append(out, s[:m], s[m:m+1])
    s = s[m+1:]
    }
    out = append(out, s)
    return
    }

    这仅限于要分割的单个字符。传递诸如 splitCharsInclusive("(z)(y)(x)", "()")之类的内容可能无法获得所需的输出,因为您在响应中会得到一些空字符串。但是希望这是进行所需修改的一个很好的起点。

    另外,我链接的Go版本会预先计算输出数组的长度,这是我决定省略的不错的优化方法,但添加起来可能会很好。

    关于go - 如何拆分字符串但将分隔符保留为单独的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60960139/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com