文字列から区切り記号の前後のスライスを取得するにはどうすればよいですか? Pythonでは、簡単に書くことができます
user, _, domain = "foo@example.com".partition("@")
assert user == "foo"
assert domain == "example.com"
特に、これは、セパレーターが入力に複数存在する場合、またはまったく存在しない場合にも機能します。Goで簡単に文字列を分割するにはどうすればよいですか?
文字列から区切り記号の前後のスライスを取得するにはどうすればよいですか? Pythonでは、簡単に書くことができます
user, _, domain = "foo@example.com".partition("@")
assert user == "foo"
assert domain == "example.com"
特に、これは、セパレーターが入力に複数存在する場合、またはまったく存在しない場合にも機能します。Goで簡単に文字列を分割するにはどうすればよいですか?
ラップするこのヘルパー関数を使用できますSplitN
:
import "strings"
func Partition(s string, sep string) (string, string, string) {
parts := strings.SplitN(s, sep, 2)
if len(parts) == 1 {
return parts[0], "", ""
}
return parts[0], sep, parts[1]
}
実際、SplitN では、多くてもn
文字列を解析できます。メールチェックにもっと簡単なものが必要な場合は、以下のコードのようなものを試すことができます. エラーチェックもお忘れなく。
package main
import (
"fmt"
"strings"
"errors"
)
func Separate(str, separator string) (string, string, error){
sepIndex := strings.Index(str, separator)
if sepIndex >= 0 {
return str[0 : (sepIndex)], str[sepIndex+len(separator) : len(str)], nil
} else {
return "", "", errors.New("Separator now found!")
}
}
func main(){
str := "@xmyname@xample.com"
fmt.Println("Initial string: ", str)
p1, p2, err := Separate(str, "@x")
if err != nil{
fmt.Println(err)
} else {
fmt.Println("Slice 1:", p1, "\nSlice 2:",p2)
}
}