2016-11-14 67 views
1

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

该字符串为“foo(巴)FOO(巴兹)golang”的一个例子,我想“吧”和“巴兹”

在python

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

怎么做的走?

+0

请注意,在Python中,您可以使用're.findall(r“\(([^)] +)\)”,“foo(bar)foo (baz)golang“)'得到相同的结果。您不必使用're.findall'的lookaround。 –

回答

1

goregexp包不支持零个宽度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比赛.*?\)

  • \)比赛字面)


Go playground demo

1

试试这个:

\((.*?)\) 

Explanation

代码示例:

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]) 
    } 
} 

Run the go code here

相关问题