2016-12-23 5 views
0

golang strings.SplitAfterメソッドは、特殊文字の後のテキストをスライスに分割しますが、マッチ後にRegexpタイプでテキストを分割する方法が見つかりませんでした。それを行う方法はありますか?Golang SplitAfter for Regexpタイプ

例:

var text string = "1.2.3.4.5.6.7.8.9" 

res := strings.Split(text, ".") 
fmt.Println(res) // print [1 2 3 4 5 6 7 8 9] 

res = strings.SplitAfter(text, ".") 
fmt.Println(res) // print [1. 2. 3. 4. 5. 6. 7. 8. 9] 
+0

['func(* Regexp)Split'](https://golang.org/pkg/regexp/#Regexp.Split)で何が問題になっていますか?予想される出力をいくつかのサンプル入力テキストに入力してください。 –

+0

'Split'は分割された文字ポイントを削除しますが、SplitAfterは文字を削除しないで分割した後に分割します。 –

+0

Go正規表現フレーバーはルックアラウンドをサポートしていないので、これは本当に素晴らしい機能です。 –

答えて

0

正規表現の種類自体がまさにそれが、それはあなたの提示は、正規表現の機能に基づいて、どのような実装する関数を書くことは非常に簡単だということを行うためのメソッドを持っていない:

func SplitAfter(s string, re *regexp.Regexp) []string { 
    var (
     r []string 
     p int 
    ) 
    is := re.FindAllStringIndex(s, -1) 
    if is == nil { 
     return append(r, s) 
    } 
    for _, i := range is { 
     r = append(r, s[p:i[1]]) 
     p = i[1] 
    } 
    return append(r, s[p:]) 
} 

Here私はそれを使って遊ぶプログラムを残しました。

関連する問題