条件分割字符串

时间:2018-05-14 12:05:33

标签: go split

我想拆分一个类型' a / b / c'并允许通过'来逃避。 例如:

'foo/bar\/2.2/baz':
a=foo
b=bar/2.2
c=baz

是否有任何优雅的方式可以分开' /',忽略' \ /'?

2 个答案:

答案 0 :(得分:3)

无论您使用何种语言,您都可以使用两种基本方法。

  1. 搜索cl-format之前未出现的所有/并执行拆分。
  2. \的所有实例替换为不包含\/的唯一符号,然后在/上拆分,并再次用/替换唯一符号。
  3. 从计算的角度来看,前者会更有效率。

    从编码复杂性的角度来看,后者可能更容易编写。

答案 1 :(得分:1)

你可以使用以下风格的东西:

func split(str string) []string {
    var parts []string
    var current bytes.Buffer
    escaped := false

    for _, r := range str {
        if r == '\\' && !escaped {
            escaped = true
        } else if r == '/' && !escaped {
            parts = append(parts, current.String())
            current.Reset()
        } else {
            escaped = false
            current.WriteRune(r)
        }
    }
    parts = append(parts, current.String())
    return parts
}

Go Playground链接:https://play.golang.org/p/RwLwFlsAW2Q