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 回答