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

