You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang如何按指定分隔符拆分字符串并得到符合要求的切片

解决方案

明确需求:按单个&作为分隔符拆分字符串,连续出现的&&仅将后一个&作为分隔符,前一个&保留到前序片段中。

方法1:正则表达式拆分(实现简单)

使用正则&(?=[^&])匹配符合要求的分隔符:该正则仅匹配后一位不是&的&字符,连续&&中只有靠后的&会被识别为分隔符。
Go代码示例:

package main

import (
	"fmt"
	"regexp"
)

func main() {
	foo := "foo=1&bar=2&&a=8"
	re := regexp.MustCompile(`&(?=[^&])`)
	result := re.Split(foo, -1)
	fmt.Println(result) // 输出:[foo=1 bar=2& a=8]
}

方法2:手动遍历实现(性能更高)

如果拆分逻辑需要更高性能、避免正则的额外开销,可以自行遍历字符实现拆分逻辑:

func splitSingleAmpersand(s string) []string {
	var res []string
	start := 0
	for i := 0; i < len(s); i++ {
		if s[i] == '&' {
			// 下一个字符也是&,跳过当前&,不拆分
			if i+1 < len(s) && s[i+1] == '&' {
				i++
				continue
			}
			// 单个&作为分隔符,切分片段
			res = append(res, s[start:i])
			start = i + 1
		}
	}
	// 追加最后一段
	if start <= len(s) {
		res = append(res, s[start:])
	}
	return res
}

调用该方法传入目标字符串即可得到预期结果。

原strings.Split不符合预期的原因:该方法会将所有匹配到的&都作为分隔符处理,连续&&会被识别为两个独立分隔符,中间自然会生成空字符串片段。

内容的提问来源于stack exchange,提问作者Hexwell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:48:00