Разделить строку с помощью регулярного выражения в Go - PullRequest
19 голосов
/ 17 декабря 2010

Я действительно новичок в Go, и до сих пор наслаждаюсь этим. Я пытаюсь найти хороший способ разбить строку, используя регулярное выражение вместо строки. Спасибо

http://nsf.github.com/go/strings.html?f:Split!

Ответы [ 5 ]

15 голосов
/ 08 февраля 2013

Я сделал функцию разделения на регулярные выражения, основанную на поведении функции разделения на регулярные выражения в java, c #, 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]
10 голосов
/ 25 февраля 2011

Если вы просто хотите разделить определенные символы, вы можете использовать strings.FieldsFunc, в противном случае я бы пошел с regexp.FindAllString.

9 голосов
/ 05 февраля 2017

Лучшим способом сделать это будет функция regexp.Split () .

7 голосов
/ 05 июля 2018

Вы можете использовать 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!"]
}
2 голосов
/ 17 декабря 2010

Вы должны иметь возможность создать свою собственную функцию разбиения, которая перебирает результаты RegExp.FindAllString, помещая промежуточные подстроки в новый массив.

http://nsf.github.com/go/regexp.html?m:Regexp.FindAllString!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...