代码之家  ›  专栏  ›  技术社区  ›  Sankar

golang regexp查找匹配字符串

  •  0
  • Sankar  · 技术社区  · 4 年前

    我有格式的字符串 %s/%s/%s:%s / 最后一个是 : . 我想提取单独的子字符串。例如:

    package main
    
    import (
        "regexp"
        "fmt"
    )
    
    func main() {
        re := regexp.MustCompile(".*/.*/.*:.*")
        fmt.Println(re.FindAllStringSubmatch("a/b/c-c:d", -1))
    }
    

    a , b , c-c d 作为单个元素印刷。但我无法提取单个字段。整个字符串作为数组的第一个元素返回 FindAllStringSubmatch 返回。如何提取与正则表达式匹配的单个元素?

    游乐场连接: https://play.golang.org/p/M1sKGl0n2tK

    2 回复  |  直到 4 年前
        1
  •  1
  •   ARIF MAHMUD RANA    4 年前

    使用分割,因为它的模式是固定的,你知道它是 : 然后分开 / 分离regex是一个昂贵的CPU进程

    parts := strings.Split("a/b/c-c:d", ":")
    fmt.Println(strings.Split(parts[0], "/"), parts[1])
    

    &如果您喜欢使用正则表达式,那么也可以使用完全匹配 ^ 开始时& $ 最后

    "^([^/]+)/([^/]+)/([^/]+):([^:]+)$"
    

    e、 g这不匹配 "a/a/b/c-c:d" 但会匹配的 "a/b/c-c:d"

        2
  •  1
  •   Liju    4 年前

    使用捕获的组提取单个字符串。
    在regex下面尝试匹配字符串,并使用$1、$2、$3、$4来匹配各个字符串。

    (.+)/(.+)/(.+):(.+)
    

    Demo