2010-12-16 11 views

Odpowiedz

8

Jeśli chcesz tylko podzielić na niektóre znaki, możesz użyć strings.FieldsFunc, w przeciwnym razie wybrałbym regexp.FindAllString.

+0

Próbowałem tego, ale to nadpisuje postać, którą chcę podzielić. Nie chcę stracić postaci, wystarczy wstawić spację. Użyłem pętli for, aby dostać się do mojego celu. Dzięki. PS - Twoja odpowiedź nie zawierała wyrażeń regularnych, może dlatego jest głosowanie odmowne? – Brenden

+0

Nic nie jest "nadpisywane", to tylko kwestia tego, co zostało zwrócone. Jeśli chcesz, możesz zawsze użyć innej funkcji wyrażeń regularnych, aby uzyskać indeksy i użyć ich. –

1

Powinieneś być w stanie stworzyć własną funkcję podziału, która zapętla się nad wynikami RegExp.FindAllString, umieszczając podciągające podciągi w nowej tablicy.

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

+1

Nie wiem, skąd się wzięło 'RegExp', ale poprawna nazwa pakietu to' regexp'. Go rozróżnia wielkość liter! –

13

Wykonałem funkcję podziału na wyrażenie regularne w oparciu o zachowanie funkcji podziału regex w java, C#, php .... Zwraca ona tylko tablicę ciągów, bez informacji o indeksie.

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 
} 

przykład:

fmt.Println(RegSplit("a1b22c333d", "[0-9]+")) 

wynik:

[a b c d] 
5

Funkcja regexp.Split() będzie najlepszym sposobem, aby to zrobić.

+0

Wygląda na to [dodano w wersji 1.1] (https://golang.org/doc/go1.1) ([maj 2013] (https://golang.org/doc/devel/release.html#go1. 1)). – n8henrie

Powiązane problemy