在Go中对字符串进行分区

时间:2013-10-30 13:29:23

标签: go

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

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

值得注意的是,如果输入中出现多次出现分隔符,或者根本没有出现分隔符,则此方法也有效。如何在Go中轻松分割字符串?

2 个答案:

答案 0 :(得分:4)

你可以使用这个包装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]
}

答案 1 :(得分: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)
    }
}