首页 文章

获取Golang regexp中括号内的所有子字符串

提问于
浏览
1

我希望使用正则表达式获取所有括号内的所有子串 .

作为字符串“foo(bar)foo(baz)golang”的一个例子,我想要“bar”和“baz”

在python我可以做 re.findall("(?<=\()[^)]+(?=\))", "foo(bar)foo(baz)golang")

怎么做去?

2 回答

  • 3

    goregexp 包不支持零宽度外观 . 您可以使用 regexp.FindAllStringSubmatch() 函数利用捕获的分组:

    package main
    
    import (
        "regexp"
        "fmt"
    )
    
    func main() {
        str := "foo(bar)foo(baz)golang"
        rex := regexp.MustCompile(`\(([^)]+)\)`)
        out := rex.FindAllStringSubmatch(str, -1)
    
        for _, i := range out {
            fmt.Println(i[1])
        }
    }
    

    输出:

    bar
    baz
    

    正则表达式 \(([^)]+)\)

    • \( 匹配文字 (

    • ([^)]+) 匹配substring upto next ) 并将匹配放入捕获的组中,在这里你可以使用非绿色匹配 .*?\)

    • \) 匹配文字 )


    Go playground demo

  • 1

    试试这个:

    \((.*?)\)
    

    Explanation

    代码示例:

    package main
    
    import (
        "regexp"
        "fmt"
    )
    
    func main() {
        var re = regexp.MustCompile(`\((.*?)\)`)
        var str = `foo(bar)foo(baz)golang`
    
        mt:= re.FindAllStringSubmatch(str, -1)
    
        for _, i := range mt {
            fmt.Println(i[1])
        }
    }
    

    Run the go code here

相关问题