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

如何在Go语言中将含非数字字符的字符串拆分为纯数字字符串数组?

在Go语言中提取字符串中的数字字符为字符串数组

嘿,这个需求挺常见的,我给你分享两种实用的实现方式,你可以根据场景选择:


方法一:遍历字符逐个判断(性能优先)

这种方式最直观,直接遍历字符串的每个字符,筛选出数字字符并加入结果数组。因为Go的字符串是UTF-8编码,用rune遍历能更好地处理各种字符情况:

package main

import (
	"fmt"
	"unicode"
)

func main() {
	str := "035a 444$ bb"
	var digitSlice []string

	// 遍历字符串的每个rune(字符)
	for _, char := range str {
		// 判断是否为数字字符
		if unicode.IsDigit(char) {
			// 将rune转为字符串并添加到数组
			digitSlice = append(digitSlice, string(char))
		}
	}

	fmt.Println(digitSlice) // 输出: [0 3 5 4 4 4]
}

这种方法的优势是性能较高,没有正则表达式的解析开销,适合处理大文本或对性能敏感的场景。


方法二:正则表达式实现(简洁优先)

如果追求代码简洁,用正则表达式一行就能搞定匹配和提取:

package main

import (
	"fmt"
	"regexp"
)

func main() {
	str := "035a 444$ bb"
	// 匹配单个数字的正则表达式
	digitRegex := regexp.MustCompile(`\d`)
	// 提取所有匹配的数字子串,-1表示匹配全部
	digitSlice := digitRegex.FindAllString(str, -1)

	fmt.Println(digitSlice) // 输出: [0 3 5 4 4 4]
}

这里\d是正则中匹配单个阿拉伯数字的元字符,FindAllString会返回所有符合条件的字符串组成的数组,完全符合你的需求。这种写法代码量少,可读性也不错,适合快速实现。


两种方式对比

  • 遍历判断:性能更优,无额外依赖,适合高性能场景
  • 正则表达式:代码更简洁,逻辑更直观,适合快速开发或小文本处理

你可以根据自己的实际需求来选择~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:10:41