获取Golang正则表达式中括号内的所有子字符串

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

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

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

怎么做呢?


茅侃侃
浏览 337回答 2
2回答

森林海

go的regexp包不支持零宽度环视。您可以利用以下功能利用捕获的分组regexp.FindAllStringSubmatch():package mainimport (&nbsp; &nbsp; "regexp"&nbsp; &nbsp; "fmt")func main() {&nbsp; &nbsp; str := "foo(bar)foo(baz)golang"&nbsp; &nbsp; rex := regexp.MustCompile(`\(([^)]+)\)`)&nbsp; &nbsp; out := rex.FindAllStringSubmatch(str, -1)&nbsp; &nbsp; for _, i := range out {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println(i[1])&nbsp; &nbsp; }}输出:barbaz正则表达式\(([^)]+)\):\(匹配文字(([^)]+)匹配子字符串到下一个并将匹配放在捕获的组中,在这里您也)可以使用非贪婪匹配.*?\)\)匹配文字)

慕码人8056858

试试这个:\((.*?)\)解释代码示例:package mainimport (&nbsp; &nbsp; "regexp"&nbsp; &nbsp; "fmt")func main() {&nbsp; &nbsp; var re = regexp.MustCompile(`\((.*?)\)`)&nbsp; &nbsp; var str = `foo(bar)foo(baz)golang`&nbsp; &nbsp; mt:= re.FindAllStringSubmatch(str, -1)&nbsp; &nbsp; for _, i := range mt {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println(i[1])&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go