我希望使用正则表达式获取所有括号内的所有子字符串。
作为字符串" foo(bar)foo(baz)golang"的一个例子,我想" bar"和" baz"
在python中我可以re.findall("(?<=\()[^)]+(?=\))", "foo(bar)foo(baz)golang")
如何去做?
答案 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
:
\(([^)]+)\)
与文字\(
(
将子字符串匹配到下一个([^)]+)
并将匹配项放入捕获的组中,此处您也可以使用非绿色匹配)
.*?\)
与文字\)
答案 1 :(得分:1)
试试这个:
\((.*?)\)
代码示例:
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])
}
}