我想拆分一个类型' a / b / c'并允许通过'来逃避。 例如:
'foo/bar\/2.2/baz':
a=foo
b=bar/2.2
c=baz
是否有任何优雅的方式可以分开' /',忽略' \ /'?
答案 0 :(得分:3)
无论您使用何种语言,您都可以使用两种基本方法。
cl-format
之前未出现的所有/
并执行拆分。\
的所有实例替换为不包含\/
的唯一符号,然后在/
上拆分,并再次用/
替换唯一符号。从计算的角度来看,前者会更有效率。
从编码复杂性的角度来看,后者可能更容易编写。
答案 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