String 我怎样才能有效地将字符串拆分为多个部分

String 我怎样才能有效地将字符串拆分为多个部分,string,go,split,String,Go,Split,我在和一根绳子打交道。我想将字符串按通配符拆分为一个片段,但这个片段也应该包含这个通配符 例如:/applications/{name}/tokens/{name}应拆分为[/applications/{name}/tokens/{name}]等 这是我写的一个示例代码,但它工作不正常,我也感觉不太好 有一些示例路线需要测试。方法拆分路径将路径拆分为多个部分并同时显示:前后。以下是解决方案: var validPathRe = regexp.MustCompile("^(/{[[:alpha:

我在和一根绳子打交道。我想将字符串按通配符拆分为一个片段,但这个片段也应该包含这个通配符

例如:
/applications/{name}/tokens/{name}
应拆分为
[/applications/{name}/tokens/{name}]

这是我写的一个示例代码,但它工作不正常,我也感觉不太好

有一些示例路线需要测试。方法
拆分路径
将路径拆分为多个部分并同时显示:前后。

以下是解决方案:

var validPathRe = regexp.MustCompile("^(/{[[:alpha:]]+}|/[-_.[:alnum:]]+)+$")
var splitPathRe = regexp.MustCompile("({[[:alpha:]]+}|[-_.[:alnum:]]+)")

func splitPath(path string) parts{
    var retPaths parts

    if !validPathRe.MatchString(path) {
        return retPaths
    }

    retPaths = splitPathRe.FindAllString(path, -1)

    return retPaths
}
为此,我创建了两个正则表达式,一个用于检查路径是否有效,另一个用于提取路径的各个部分并返回它们。如果路径无效,它将返回一个空列表。返回的结果如下所示:

splitPath("/path/{to}/your/file.txt")
["path" "{to}" "your" "file.txt"]

这不包括“/”字符,因为您已经知道返回中的所有字符串,但最后一个字符串是目录,最后一个字符串是文件名。由于有效性检查,您可以假设这一点。

是否有不想使用
字符串的原因。拆分
?是的,因为我希望包含
分隔符
,在我的例子中,分隔符可以不同,例如
{name}/{names}
。你不知道
{}
之间的字符串是什么,有多少个字符串我仍然认为使用字符串可以得到最好的结果;它们很有趣,Rob Pike有一个相对著名的演讲,解释了如何编写自定义词汇扫描程序,这也很有趣。我不确定我是否理解您的要求,但这就是您想要的吗?是的,很完美,快速看一眼,我想它能像我想的那样工作。谢谢,我现在将做@JohnWeldon提到的parser/lexer解决方案,然后比较这两个解决方案的性能