首页 > 解决方案 > 如何在 Go 中将包含非数字字符的字符串拆分为字符串数组?

问题描述

如何将包含非数字字符的字符串拆分并过滤为仅包含数字字符的字符串数组?

例如,

str := "035a 444$ bb" 
//split str into s
s := []string{"0", "3", "5", "4", "4", "4"} 

标签: go

解决方案


您在这里尝试做两件单独的事情,因此您需要首先在脑海中将它们分开:

首先,您尝试删除所有非数字字符。

其次,您试图将所有剩余字符拆分为包含单个字符的切片。

没有内置函数可以从字符串中删除非数字字符,但您可以编写正则表达式匹配和替换来执行此操作:

str := "035a 444$ bb"

reg, err := regexp.Compile("[^0-9]+")
if err != nil {
    panic(err)
}

numericStr := reg.ReplaceAllString(str, "")

正则表达式匹配任何包含在 0-9 中的字符。然后regexp.ReaplceAllString()用任何内容替换这些字符。

这导致numericStr包含字符串

"035444"

之后,您可以使用strings.Split()来获取您想要的切片。

s := strings.Split(numericStr, "")

文档告诉我们:

如果 sep 为空,Split 在每个 UTF-8 序列之后拆分。

于是s变成:

[]string{"0", "3", "5", "4", "4", "4"}

推荐阅读