在Go中对字符串进行分区

在Go中对字符串进行分区,go,Go,如何从字符串中获取分隔符前后的切片?在Python中,我可以简单地编写 user, _, domain = "foo@example.com".partition("@") assert user == "foo" assert domain == "example.com" 值得注意的是,如果输入中存在多个分隔符,或者根本没有分隔符,这也可以使用。如何在Go中轻松拆分字符串?您可以使用此帮助函数,该函数包装: 实际上,SplitN允许您最多解析n字符串。如果您需要更简单的电子邮件检查方法,可

如何从字符串中获取分隔符前后的切片?在Python中,我可以简单地编写

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

值得注意的是,如果输入中存在多个分隔符,或者根本没有分隔符,这也可以使用。如何在Go中轻松拆分字符串?

您可以使用此帮助函数,该函数包装:


实际上,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)
    }
}

也许你应该用Python来标记你的问题,因为Python/Gophers可能比Gophers更感兴趣。@miltonb那么,纯粹的Gophers不需要在分隔符前后将字符串拆分成所有内容吗?谢谢,如果找不到at符号,只需让分隔符和后分隔符部分为空,就可以简化方法签名。对于没有多大意义的电子邮件,比如说将URL拆分为协议和路径(并且像
自定义方案:
这样的内容可能是有效的URL),无错误版本实际上非常方便。事实上,
单独的
实现了这一点。如果找不到分隔符,则返回空字符串。在这种情况下会出现错误,这就是为什么您应该检查任何错误。我修改了代码,以便它可以跟踪分隔符是否位于行的开头。
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)
    }
}