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

时间:2016-11-14 10:16:29

标签: regex go

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

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

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

如何去做?

2 个答案:

答案 0 :(得分:3)

go的{​​{1}}包不支持零宽度外观。您可以使用regexp函数利用捕获的分组:

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

  • \(([^)]+)\)与文字\(

  • 相匹配
  • (将子字符串匹配到下一个([^)]+)并将匹配项放入捕获的组中,此处您也可以使用非绿色匹配)

  • .*?\)与文字\)

  • 相匹配

Go playground demo

答案 1 :(得分: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