gpt4 book ai didi

regex - 将具有字符串键/值的文件转换为 Go 映射

转载 作者:IT王子 更新时间:2023-10-29 02:26:53 25 4
gpt4 key购买 nike

我有一个文件,其中包含由 = 符号分隔的字符串键/值对。它看起来像这样:

"some.key" = "A cool value.";
"some.other.key" = "A cool value with %@ chars and \n. Another Thing.";
"escaped.key" = "A cool \"value\".";
"multiline.key.value" = "1. First sentence is "cool"\
2. Second sentence\
3. Third sentence\
4. Fourth sentence";

请注意,一个值内部可以有转义引号,它们也可以跨越多行。

我已经尝试过基本的引号匹配,但它不处理值中的转义引号等......这是我目前正在尝试的:

file, err := ioutil.ReadFile("/my/string/file")
if err != nil {
log.Fatal(err)
}

re := regexp.MustCompile(`".*?"`)
match := re.FindAllString(string(file), -1)
fmt.Println(match)

任何帮助将不胜感激:D

最佳答案

另一种方法 - 您可以使用带有自定义 split function 的扫描仪按您的对分隔符 ; 拆分并扫描每个单独的 key 对。然后用“-”分割键值对文本来分割你的键和值。

file, err := os.Open("/my/string/file")
if err != nil {
log.Fatal(err)
}
defer f.Close()

scanner := bufio.NewScanner(f)
scanner.Split(customSplitFunc)
for scanner.Scan() {
fmt.Println("Key-Value Pair: ", scanner.Text())
//Split scanner.Text() by "=" to split key and value
}

并如下定义customSplitFunc

func customSplitFunc(data []byte, atEOF bool) (advance int, token []byte, err error) {
if atEOF && len(data) == 0 {
return 0, nil, nil
}

if atEOF {
return len(data), data, nil
}

//; followed by newline is the k-v pair delimiter
if i := strings.Index(string(data), ";\n"); i >= 0 {
//skip the delimiter in advancing to the next pair
return i + 2, data[0:i], nil
}
return
}

关于regex - 将具有字符串键/值的文件转换为 Go 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55775085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com