Как сопоставить содержимое в двойных кавычках с регулярным выражением в golang? - PullRequest
0 голосов
/ 12 сентября 2018
content := `{null,"Age":24,"Balance":33.23}`
rule,_ := regexp.Compile(`"([^\"]+)"`)
results := rule.FindAllString(content,-1)
fmt.Println(results[0]) //"Age" 
fmt.Println(results[1]) //"Balance"

Существует строка json со значением `` null``, которая выглядит следующим образом.

Этот json из веб-API, и я не хочу ничего заменять внутри.

Я хочу использовать регулярное выражение для сопоставления всех ключей в этом json, которые не содержат двойных кавычек, а выводом являются `` Age`` и `` Balance``, но не `` "Age" `` и ``" Баланс "` `.

Как мне этого добиться?

1 Ответ

0 голосов
/ 02 октября 2018

Одним из решений было бы использование регулярного выражения, которое соответствует любому символу между кавычками (например, ваш пример или ".*?"), и либо поместите соответствующую группу (также называемую «подстроком») внутри кавычек, либо верните соответствующую подстроку изсопоставить, используя 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

}

Обратите внимание, что вторая версия (без подгруппы подстановок) может быть немного быстрее на основе простого теста производительности, если критична производительность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...