Как разбить строку, содержащую нечисловые символы, в массив строк в Go? - PullRequest
0 голосов
/ 17 мая 2018

Как бы я разделил и отфильтровал строку, содержащую нечисловые символы, в массив строк, содержащий только числовые символы?

например.,

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

Ответы [ 3 ]

0 голосов
/ 17 мая 2018

Это должно работать.

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").
с будет [0 3 5 4 4 4]

0 голосов
/ 17 мая 2018

Проблема XY

Проблема 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)
}

Выход:

035a 444$ bb
035444
0 голосов
/ 17 мая 2018

Вы пытаетесь сделать две разные вещи здесь, поэтому вам нужно сначала разделить их в уме:

Сначала вы пытаетесь удалить все нечисловые символы.

Во-вторых, вы пытаетесь разделить все оставшиеся символы на фрагмент, содержащий отдельные символы.

Нет встроенной функции для удаления нечисловых символов из строки, но вы можете написать совпадение регулярного выражения и заменить его следующим образом:

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"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...