我想使用正則表達式獲取所有括號中的所有子字符串。獲取Golang中括號內的所有子字符串正則表達式
該字符串爲「foo(巴)FOO(巴茲)golang」的一個例子,我想「吧」和「巴茲」
在python我可以做re.findall("(?<=\()[^)]+(?=\))", "foo(bar)foo(baz)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。 –