Go言語の strings.Split は文字列を分解する際に区切り文字が1種類しか指定出来ません。
例えば、a,b;c という区切りがある場合に、, と ; のどちらかでしか区切れません。
試しに複数指定対応の関数を作ってみましたが、仕事では(ちょっとした特殊な条件が必要で)使えなかったので、こちらにコードを晒します。ご参考までに。
プログラム
splitmultisep.go
package main
import (
"fmt"
"strings"
)
func SplitMultiSep(s string, sep []string) []string {
var ret []string
ret = strings.Split(s, sep[0])
if len(sep) > 1 {
ret2 := []string{}
for _, r := range ret {
ret2 = append(ret2, SplitMultiSep(r, sep[1:])...)
}
ret = ret2
}
return ret
}
func main() {
var s string = "a&b,c;d"
a := SplitMultiSep(s, []string{"&", ",", ";"})
fmt.Println(a)
}
実行結果
$ go run splitmultisep.go
[a b c d]
仕組み
区切り文字列の配列を渡されるので、まず一つ目の区切り文字列で分解して、分解された文字列を各々2つ目の区切り文字列で分解して、というのを再帰的に繰り返します。
追記 (regexp 方式)
そもそも regexp で良いとの指摘を複数受けました。
package main
import "fmt"
import "regexp"
func main() {
var s string = "a&b,c;d"
a := regexp.MustCompile("[&,;]").Split(s, -1)
fmt.Println(a)
}
速度を気にする場面でも正規表現をコンパイルしてキャッシュすれば良さそうですし、こっちの方が良いかも?