使用正则表达式在Golang中查找所有字符串匹配项

24
我试图返回一个包含字符串中特定正则表达式的所有匹配项的数组或切片。该字符串为:

I am trying to return an array, or slice, with all the matches for a specific regex expression against a string. The string is:

{city}, {state} {zip}
我想返回一个包含所有花括号中字符串的数组。我尝试使用 regexp 包来实现这个目标,但无法找到需要返回的内容。这是我的当前代码:

我想返回一个包含所有花括号中字符串的数组。我尝试使用 regexp 包来实现这个目标,但无法找到需要返回的内容。这是我的当前代码:

r := regexp.MustCompile("/({[^}]*})/")
matches := r.FindAllString("{city}, {state} {zip}", -1)

但是,无论我尝试什么,它每次都只返回一个空切片。

1个回答

35

首先,你不需要使用正则表达式定界符。其次,在需要使用1个反斜杠转义正则表达式元字符的情况下,最好使用原始字符串字面量定义正则表达式模式。第三,只有在需要获取不包括{}的值时才需要捕获组,因此你可以删除它以获取{city}{state}{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 演示

正则表达式细节

  • { - 匹配字面字符 {
  • ([^{}]*)- 捕获组,用于匹配除了 {} 之外的任意0个或多个字符(由于量词符号 *) ([^...] 是一个否定字符类,匹配除指定在[^]之间的字符以外的任何字符)
  • } - 匹配字面字符 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接