获取Golang中括号内的所有子字符串正则表达式
问题描述:
我想使用正则表达式获取所有括号中的所有子字符串。获取Golang中括号内的所有子字符串正则表达式
该字符串为“foo(巴)FOO(巴兹)golang”的一个例子,我想“吧”和“巴兹”
在python我可以做re.findall("(?<=\()[^)]+(?=\))", "foo(bar)foo(baz)golang")
怎么做的走?
答
go
的regexp
包不支持零个宽度lookarounds。您可以利用捕获与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
正则表达式\(([^)]+)\)
:
\(
比赛字面(
场
([^)]+)
比赛串高达下一)
,并把比赛以捕获组,在这里你可以使用非greeedy比赛.*?\)
太\)
比赛字面)
答
试试这个:
\((.*?)\)
代码示例:
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])
}
}
请注意,在Python中,您可以使用're.findall(r“\(([^)] +)\)”,“foo(bar)foo (baz)golang“)'得到相同的结果。您不必使用're.findall'的lookaround。 –