Одним из решений было бы использование регулярного выражения, которое соответствует любому символу между кавычками (например, ваш пример или ".*?"
), и либо поместите соответствующую группу (также называемую «подстроком») внутри кавычек, либо верните соответствующую подстроку изсопоставить, используя regexp.FindAllStringSubmatch(...)
или regexp.FindAllString(...)
соответственно.
Например ( Go Playground ):
func main() {
str := `{null,"Age":24,"Balance":33.23}`
fmt.Printf("OK1: %#v\n", getQuotedStrings1(str))
// OK1: []string{"Age", "Balance"}
fmt.Printf("OK2: %#v\n", getQuotedStrings2(str))
// OK2: []string{"Age", "Balance"}
}
var re1 = regexp.MustCompile(`"(.*?)"`) // Note the matching group (submatch).
func getQuotedStrings1(s string) []string {
ms := re1.FindAllStringSubmatch(s, -1)
ss := make([]string, len(ms))
for i, m := range ms {
ss[i] = m[1]
}
return ss
}
var re2 = regexp.MustCompile(`".*?"`)
func getQuotedStrings2(s string) []string {
ms := re2.FindAllString(s, -1)
ss := make([]string, len(ms))
for i, m := range ms {
ss[i] = m[1 : len(m)-1] // Note the substring of the match.
}
return ss
}
Обратите внимание, что вторая версия (без подгруппы подстановок) может быть немного быстрее на основе простого теста производительности, если критична производительность.