亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

掃描未正確匹配單引號

掃描未正確匹配單引號

Go
拉莫斯之舞 2022-09-12 21:07:01
我正在處理一些Go代碼,但我很難弄清楚為什么我的字符串沒有被正確掃描。我得到了一個如下所示的字符串:"ERROR: 1: something happened 'here'"我試圖像這樣掃描它:n, err := fmt.Sscanf("ERROR: 1: something happened 'here'", "ERROR: 1: something happened '%50s'", &value)但是,每次我檢查值的結果時,我都會得到這樣的東西:here'最后一個單引號的保留位置。任何想法如何解決這個問題?我認為這種情況不會是非確定性的,因為函數不能在沒有引號的情況下完成格式化。當然,我可以簡單地刪除最后一個字符,但我更喜歡基于的解決方案。fmt
查看完整描述

1 回答

?
MM們

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"


查看完整回答
反對 回復 2022-09-12
  • 1 回答
  • 0 關注
  • 69 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號