首先,您不需要正则表达式分隔符。其次,使用原始字符串文字来定义正则表达式模式是一个好主意,您只需使用 1 个反斜杠来转义正则表达式元字符。{第三,仅当您需要获取不带and的值时才需要捕获组},因此,您可以将其删除以获取{city}, {state}and {zip}。


您可以使用FindAllString获取所有匹配项:


r := regexp.MustCompile(`{[^{}]*}`)

matches := r.FindAllString("{city}, {state} {zip}", -1)

请参阅Go 演示。


要仅获取花括号之间的部分,请使用FindAllStringSubmatch包含捕获括号的模式,{([^{}]*)}:


r := regexp.MustCompile(`{([^{}]*)}`)

matches := r.FindAllStringSubmatch("{city}, {state} {zip}", -1)

for _, v := range matches {

    fmt.Println(v[1])

}

请参阅此 Go 演示。


正则表达式详细信息

{{([^{}]*)*{}[^...][^]}}