2016-11-14 105 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

相關問題