转到:用逗号分隔字符串,但忽略双引号内的逗号

时间:2019-12-12 04:30:12

标签: regex go

我输入的字符串用逗号分隔。但是它可能在双引号中包含逗号,需要将其忽略。下面是示例字符串

str := "\"age\": \"28\", \"favorite number\": \"26\", \"salary\": \"$1,234,108\""

下面是我用于在逗号上分割的代码,但是当逗号是双引号中的字符串的一部分时,它会失败。

s1 := strings.Split(s, "\"")
s2 := strings.Join(s1, "")
s3 := strings.Split(s2, ",")

所以任何人都想如何解决此问题。

2 个答案:

答案 0 :(得分:1)

以下功能将满足您的需求。

// SplitAtCommas split s at commas, ignoring commas in strings.
func SplitAtCommas(s string) []string {
    res := []string{}
    var beg int
    var inString bool

    for i := 0; i < len(s); i++ {
        if s[i] == ',' && !inString {
            res = append(res, s[beg:i])
            beg = i+1
        } else if s[i] == '"' {
            if !inString {
                inString = true
            } else if i > 0 && s[i-1] != '\\' {
                inString = false
            }
        }
    }
    return append(res, s[beg:])
}

此处提供了完整的示例:https://play.golang.org/p/f5jceIm4nbE

答案 1 :(得分:-1)

您可以使用以下代码获取键和值

package main

import (

"fmt"
"strings"

)

func main() {
  str := "\"age\": \"28\", \"favorite number\": \"26\", \"salary\": \"$1,234,108\""
  arr := strings.Split(str,`",`)
  for _, v := range arr {
     val := strings.Split(v,`:`)
     fmt.Println("Key:",val[0],"value:",val[1])
  }
}

playground中运行