gpt4 book ai didi

go - 带有转义新行的 bufio.ScanLines

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

我正在尝试调整 bufio.ScanLines,以便它知道转义的新行 \\n

输入:

line1 \
continues on line2

预期输出:

["line1 continues on line2"]

现在 bufio.ScanLines 的输出(参见下面的示例代码)是:

["line1 \\", "continues on line2"]

示例代码:

s := bufio.NewScanner(f)
s.Split(bufio.ScanLines)

for s.Scan() {
fmt.Println(s.Text())
}

这里最好的方法是什么?寻找仍能通过 https://golang.org/src/bufio/scan_test.go 中测试的实现.

最佳答案

我想到了一些明显的方法。

首先,看一下 source for bufio.ScanLines ,它并不大,您可以轻松实现自己的 bufio.SplitFunc从头开始,从那个修改过的副本开始做你想做的事。

其次,您可以编写一个在循环中调用 bufio.ScanLinesbufio.SplitFunc,组合标记,只要它返回以转义字符结尾的标记,然后返回组合的 token 。

考虑到第一种方法的短小和简单,我可能会这样做。第二种方法可能会一样长,效率较低,并且可能需要状态,因为您需要在返回 (0, nil, nil) 时存储到目前为止的组合 token 要求更多意见。

另一种解决方案是实现 Transformer (来自 golang.org/x/text/transform 包)从输入中去除相关的转义字符(例如删除 "\\\n")并使用 transform.NewReader 制作一个过滤后的阅读器,然后您可以根据需要使用它(例如,使用常规 ScanLines 传递给 bufio.Scanner) .

在任何情况下,您都可以从 scan_test.go 复制适当的测试,并为转义换行行为添加您自己的测试。还要注意 bufio.MaxScanTokenSize

关于go - 带有转义新行的 bufio.ScanLines,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30431331/

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