2016-11-14 2 views
1

Я хочу получить все подстроки во всех круглых скобках в go, используя Regex.Получить все подстроки в круглых скобках в Golang regexp

В качестве примера для строки «Foo (бар) Foo (БАЗ) golang», я хочу «бар» и «Баз»

в питоне я могу сделать re.findall("(?<=\()[^)]+(?=\))", "foo(bar)foo(baz)golang")

Как сделать это в идти?

+0

Обратите внимание, что в Python вы можете использовать 're.findall (r" \ (([^)] +) \) "," foo (bar) foo (baz) golang ")', чтобы получить те же результаты. Вам не нужно использовать lookarounds с 're.findall'. –

ответ

1

go «s 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 

В REGEX \(([^)]+)\):

  • \( совпадает, буквенные (

  • ([^)]+) матчи подстрок ДО следующего ) и поставить матч в захваченном группе, здесь вы можете использовать не 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

Смежные вопросы