2010-12-16 21 views

答えて

8

特定の文字に分割したい場合は、strings.FieldsFuncを使用できます。そうでないと、regexp.FindAllStringとなります。

+0

私はこれを試しましたが、分割したい文字を上書きします。私はキャラクターを失いたくない、ちょうどスペースを挿入する。私はforループを使って目標を達成しました。ありがとう。 PS - あなたの答えは正規表現を含んでいませんでした、多分それが下の投票があるのですか? – Brenden

+0

「上書きされる」ものは何もありません。返されたものの単なる質問です。あなたが好きなら、いつも異なる正規表現関数を使ってインデックスを取得し、それらを使うことができます。 –

1

RegExp.FindAllStringの結果をループする独自の分割関数を作成し、介在する部分文字列を新しい配列に配置することができます。

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

+1

'RegExp'はどこから得られたのかよく分かりませんが、正しいパッケージ名は' regexp'です。 Goは大文字と小文字を区別します! –

13

java、c#、php ....のregex split関数の動作に基づいて正規表現分割関数を作成しました。インデックス情報なしで文字列の配列のみを返します。

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] 
5

regexp.Split()機能は、これを実行するための最良の方法だろう。

+0

[Go 1.1で追加](https://golang.org/doc/go1.1)([2013年5月](https://golang.org/doc/devel/release.html#go1)です。 1))。 – n8henrie

関連する問題