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 關注
- 69 瀏覽
添加回答
舉報