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

如何在Go中将包含非数字字符的字符串拆分为字符串数组?,go,Go,如何将包含非数字字符的字符串拆分并筛选为仅包含数字字符的字符串数组 例如: 你试图在这里做两件不同的事情,所以你需要首先在脑海中把它们分开: 首先,您试图删除所有非数字字符 其次,您正试图将所有剩余字符分割为包含单个字符的片段 没有从字符串中删除非数字字符的内置函数,但您可以编写正则表达式匹配和替换来执行此操作: str := "035a 444$ bb" reg, err := regexp.Compile("[^0-9]+") if err != nil { panic(err)

如何将包含非数字字符的字符串拆分并筛选为仅包含数字字符的字符串数组

例如:


你试图在这里做两件不同的事情,所以你需要首先在脑海中把它们分开:

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

其次,您正试图将所有剩余字符分割为包含单个字符的片段

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

str := "035a 444$ bb"

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

numericStr := reg.ReplaceAllString(str, "")
正则表达式匹配任何不在0-9(含0-9)中的字符。然后将这些字符替换为零

这会导致
numericStr
包含字符串

"035444"
之后,您可以使用来获取所需的切片

s := strings.Split(numericStr, "")
文件告诉我们:

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

因此
s
变成:

[]string{"0", "3", "5", "4", "4", "4"}
这应该行得通

func getNumericChars(s string) []string {
    var result []string
    // iterating through each character in string
    for _, c := range strings.Split(s, "") {
        // if character can be converted to number append it to result 
        if _, e := strconv.Atoi(c); e == nil {
            result = append(result, c)
        }
    }
    return result
}
调用
s:=getNumericChars(“035a 444$bb”)

s将
[0 3 5 4 4 4]

XY问题是询问您试图解决的问题,而不是实际问题


为什么你想要一段一位数的字符串而不是一串数字

比如说,

package main

import "fmt"

func number(s string) string {
    n := make([]byte, 0, len(s))
    for _, r := range s {
        if r >= '0' && r <= '9' {
            n = append(n, byte(r))
        }
    }
    return string(n)
}

func main() {
    str := "035a 444$ bb"
    fmt.Println(str)
    num := number(str)
    fmt.Println(num)
}
package main

import "fmt"

func number(s string) string {
    n := make([]byte, 0, len(s))
    for _, r := range s {
        if r >= '0' && r <= '9' {
            n = append(n, byte(r))
        }
    }
    return string(n)
}

func main() {
    str := "035a 444$ bb"
    fmt.Println(str)
    num := number(str)
    fmt.Println(num)
}
035a 444$ bb
035444