我想使用正则表达式获取所有括号内的所有子字符串。
作为字符串“ foo(bar)foo(baz)golang”的示例,我想要“ bar”和“ baz”
在python中我可以做 re.findall("(?<=\()[^)]+(?=\))", "foo(bar)foo(baz)golang")
re.findall("(?<=\()[^)]+(?=\))", "foo(bar)foo(baz)golang")
怎么做呢?
go的regexp软件包不支持零宽度环顾四周。您可以通过以下regexp.FindAllStringSubmatch()功能利用捕获的分组:
go
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
正则表达式\(([^)]+)\):
\(([^)]+)\)
\( 匹配文字 (
\(
(
([^)]+)匹配串高达旁边),并把比赛以捕获组,在这里你可以使用非greeedy比赛.*?\)太
([^)]+)
)
.*?\)
\) 匹配文字 )
\)
去游乐场演示