我试图返回一个数组或切片,针对字符串针对特定正则表达式的所有匹配项。字符串是:
{city}, {state} {zip}
我想返回一个花括号之间所有字符串都匹配的数组。我尝试使用regexp软件包来完成此操作,但无法弄清楚如何返回我要查找的内容。这是我当前的代码:
r := regexp.MustCompile("/({[^}]*})/") matches := r.FindAllString("{city}, {state} {zip}", -1)
但是,无论我尝试什么,每次返回的结果都是一片空白。
首先,您不需要正则表达式定界符。其次,使用原始字符串文字定义一个正则表达式模式是个好主意,您只需要使用1个反斜杠即可转义正则表达式元字符。第三,捕获组是只需要如果你需要得到的值不{和},因此,你可以删除它得到{city},{state}和{zip}。
{
}
{city}
{state}
{zip}
您可以FindAllString用来获取所有匹配项:
FindAllString
r := regexp.MustCompile(`{[^{}]*}`) matches := r.FindAllString("{city}, {state} {zip}", -1)
请参阅Go演示。
要仅获取大括号之间的部分,请使用FindAllStringSubmatch包含捕获括号的模式{([^{}]*)}:
FindAllStringSubmatch
{([^{}]*)}
r := regexp.MustCompile(`{([^{}]*)}`) matches := r.FindAllStringSubmatch("{city}, {state} {zip}", -1) for _, v := range matches { fmt.Println(v[1]) }
请参阅此Go演示。
正则表达式详细信息
([^{}]*)
*
[^...]
[^
]