1 回答
TA贡献1886条经验 获得超2个赞
内置调频器。扫描仪无法执行您要执行的操作。如果目标文本用双引号换行,则可以使用说明符。%q
或者,如果目标是单个换行字符,则可以使用 。但是因为你的目标都不是这些,所以没有内置的东西。因此,您的选项是 ,或者使用自定义扫描仪,甚至只是 。如果你坚持使用,你可以做一个自定义扫描仪,但它可能是最糟糕的选择:text/scannerregexpbufiostrings.Splitfmt
package main
import "fmt"
type quote struct { tok string }
func (q *quote) Scan(state fmt.ScanState, verb rune) error {
tok, err := state.Token(false, func(r rune) bool {
return r != 0x27 // '
})
if err != nil {
return err
}
if _, _, err := state.ReadRune(); err != nil {
if len(tok) == 0 {
panic(err)
}
}
q.tok = string(tok)
return nil
}
例:
package main
import (
"fmt"
"strings"
)
func main() {
r := strings.NewReader("ERROR: 1: something happened 'here'")
for {
var q quote
_, err := fmt.Fscan(r, &q)
if err != nil {
break
}
fmt.Printf("%q\n", q.tok)
}
}
结果:
"ERROR: 1: something happened "
"here"
- 1 回答
- 0 关注
- 56 浏览
添加回答
举报