Я действительно новичок в Go и до сих пор наслаждаюсь этим. Я пытаюсь найти хороший способ разделить строку, используя регулярное выражение вместо строки. Благодаря
Разделить строку, используя регулярное выражение в Go
Ответ 1
Если вы хотите разделить определенные символы, вы можете использовать strings.FieldsFunc
, иначе я бы пошел с regexp.FindAllString
.
Ответ 2
Я создал функцию разделения регулярных выражений, основанную на поведении функции разделения regex в java, С#, php.... Он возвращает только массив строк без информации индекса.
func RegSplit(text string, delimeter string) []string {
reg := regexp.MustCompile(delimeter)
indexes := reg.FindAllStringIndex(text, -1)
laststart := 0
result := make([]string, len(indexes) + 1)
for i, element := range indexes {
result[i] = text[laststart:element[0]]
laststart = element[1]
}
result[len(indexes)] = text[laststart:len(text)]
return result
}
Пример:
fmt.Println(RegSplit("a1b22c333d", "[0-9]+"))
результат:
[a b c d]
Ответ 3
Функция regexp.Split() будет лучшим способом для этого.
Ответ 4
Вы можете использовать regexp.Split
чтобы разбить строку на фрагмент строки с шаблоном регулярного выражения в качестве разделителя.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("[0-9]+")
txt := "Have9834a908123great10891819081day!"
split := re.Split(txt, -1)
set := []string{}
for i := range split {
set = append(set, split[i])
}
fmt.Println(set) // ["Have", "a", "great", "day!"]
}
Ответ 5
Вы должны иметь возможность создать свою собственную функцию разделения, которая перебирает результаты RegExp.FindAllString, помещая промежуточные подстроки в новый массив.
http://nsf.github.com/go/regexp.html?m:Regexp.FindAllString!