喵喔喔
如果结构始终相同并且您想要的只是 id 值,您可以执行以下操作(在 Playground 上):package mainimport ( "fmt" "strings")func main() { // This will work only if ids don't have spaces fields := strings.Fields(input1) for i, field := range fields { if field == "id:" { fmt.Println("Got an id: ", fields[i+1][1:len(fields[i+1])-1]) } } fmt.Println() // This will extract all strings enclosed in "" for i1, i2 := 0, 0;; { i := strings.Index(input2[i1:], "\"") // find the first " starting after the last match if i > 0 { // if we found one carry on i1 = i + 1 + i1 // set the start index to the absolute position in the string i2 = strings.Index(input2[i1:], "\"") // find the second " fmt.Println(input2[i1 : i1+i2]) // print the string between "" i1 += i2 + 1 // set the new starting index to after the last match } else { // otherwise we are done break } } // Reading the text line by line and only processing port sections parts := []string{"port{", " Entry {", " id: \"foo bar\"", " }", " Entry {", " id: \"more foo bar\"", " }", "}"} isPortSection := false for _, part := range parts { if string.HasPrefix(part, "port"){ isPortSection = true } if string.HasPrefix(part, "host"){ isPortSection = false } if isPortSection && strings.HasPrefix(strings.TrimSpace(part),"id:") { line := strings.TrimSpace(part) fmt.Println(line[5:len(line)-1]) } }}var input1 string = `port{ Entry { id: "foo" } Entry { id: "bar" }}`var input2 string = `port{ Entry { id: "foo bar" } Entry { id: "more foo bar" }}`印刷:Got an id: fooGot an id: barfoo barmore foo bar您可以将它们粘贴到切片或地图中,或者做任何您想做/需要做的事情,而不是在循环中打印它们。当然,而不是使用您在文件行中读取的字符串文字。