一尘不染

查找与正则表达式golang匹配的所有字符串

go

我试图返回一个数组或切片,针对字符串针对特定正则表达式的所有匹配项。字符串是:

{city}, {state} {zip}

我想返回一个花括号之间所有字符串都匹配的数组。我尝试使用regexp软件包来完成此操作,但无法弄清楚如何返回我要查找的内容。这是我当前的代码:

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

但是,无论我尝试什么,每次返回的结果都是一片空白。


阅读 817

收藏
2020-07-02

共1个答案

一尘不染

首先,您不需要正则表达式定界符。其次,使用原始字符串文字定义一个正则表达式模式是个好主意,您只需要使用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以上(由于*比其他量词)字符{}[^...]是一个否定的字符类匹配任何字符但之间指定的一个(或多个)[^]
  • }-文字}字符
2020-07-02