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

Golang:如何从含空格文本的字符串中分离数字相关部分?

Golang 拆分字符串:分离文本前缀与数字相关后缀

你的原有代码只能处理开头是连续字母的简单场景,要应对带空格的文本后缀(比如hello abc1)、带斜杠的数字组合(比如final count3/2)这类情况,只需要调整正则表达式,就能一次性搞定所有需求。

改进后的实现代码

package main

import (
	"fmt"
	"regexp"
)

func splitTextAndNumberToken(token string) (string, string) {
	// 正则说明:
	// ^(.*?) :非贪婪匹配开头的任意字符,直到遇到后面的数字/斜杠组合
	// ([\d/]+)$ :匹配结尾处一个或多个数字或斜杠
	const regexString = `^(.*?)([\d/]+)$`
	re := regexp.MustCompile(regexString)

	matches := re.FindStringSubmatch(token)
	if len(matches) == 3 {
		// 匹配成功,返回两个捕获组的内容
		return matches[1], matches[2]
	}

	// 未匹配到数字相关后缀的情况,返回空前缀和原字符串
	// 若需处理全是数字相关的场景,可在此调整逻辑
	return "", token
}

func main() {
	testCases := []string{"abc10", "hello abc1", "final count3/2", "onlytext", "123/4"}
	for _, tc := range testCases {
		t1, t2 := splitTextAndNumberToken(tc)
		fmt.Printf("输入:%q → token1: %q, token2: %q\n", tc, t1, t2)
	}
}

代码说明

  1. 正则核心:^(.*?)([\d/]+)$ 采用非贪婪模式的.*?,会尽可能少地匹配字符,确保结尾的数字/斜杠组合被完整捕获到第二个组,前面的所有内容(包括空格、字母)都会归为token1。
  2. 匹配逻辑:通过FindStringSubmatch获取结果,若返回切片长度为3(含整个匹配串+两个捕获组),则直接返回两组内容;否则按边界情况处理(纯文本或纯数字组合场景)。
  3. 场景覆盖:测试用例包含了你提到的所有目标场景,还有边界情况,可直接运行验证结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 05:38:19