2

文字列から区切り記号の前後のスライスを取得するにはどうすればよいですか? Pythonでは、簡単に書くことができます

user, _, domain = "foo@example.com".partition("@")
assert user == "foo"
assert domain == "example.com"

特に、これは、セパレーターが入力に複数存在する場合、またはまったく存在しない場合にも機能します。Goで簡単に文字列を分割するにはどうすればよいですか?

4

2 に答える 2

5

ラップするこのヘルパー関数を使用できます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]
}
于 2013-10-30T13:29:22.847 に答える
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)
    }
}
于 2013-10-31T09:59:35.830 に答える