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

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

如何在golang中實現正則表達式的不匹配?

如何在golang中實現正則表達式的不匹配?

Go
嚕嚕噠 2022-10-17 16:56:22
這是一個選擇題示例。我想在golang的以下代碼內容中獲取“英國、法國”、“加拿大、墨西哥”、“葡萄牙、加拿大”、“印度、德國”等中文文本,但它不起作用。package mainimport (    "fmt"    "regexp"    "testing")func TestRegex(t *testing.T) {    text := `( B )38.目前,亞馬遜美國站后臺,除了有美國站點外,還有(    )站點。A.英國、法國B.加拿大、墨西哥C.葡萄牙、加拿大D.墨西哥、德國`    fmt.Printf("%q\n", regexp.MustCompile(`[A-E]\.(\S+)?`).FindAllStringSubmatch(text, -1))    fmt.Printf("%q\n", regexp.MustCompile(`[A-E]\.`).Split(text, -1))}文本:( B )38.目前,亞馬遜美國站后臺,除了有美國站點外,還有(    )站點。A.英國、法國B.加拿大、墨西哥C.葡萄牙、加拿大D.墨西哥、德國圖案:[A-E]\.(\S+)?實際結果:[["A.英國、法國B.加拿大、墨西哥" "英國、法國B.加拿大、墨西哥"] ["C.葡萄牙、加拿大D.墨西哥、德國" "葡萄牙、加拿大D.墨西哥、德國"]]。預期結果:[["A.英國、法國" "英國、法國"] ["B.加拿大、墨西哥" "加拿大、墨西哥"] ["C.葡萄牙、加拿大" "葡萄牙、加拿大"] ["D.墨西哥、德國" "墨西哥、德國"]]我認為這可能是一個貪婪模式問題。因為在我的代碼中,它直接將選項 A 和選項 B 讀取為一個選項。
查看完整描述

1 回答

?
隔江千里

TA貢獻1906條經驗 獲得超10個贊

非貪心匹配不能解決這個問題,你需要正向前瞻,而re2不支持。


作為一種解決方法,可以只搜索標簽并手動提取其間的文本。


re := regexp.MustCompile(`[A-E]\.`)

res := re.FindAllStringIndex(text, -1)

results := make([][]string, len(res))

for i, m := range res {

    if i < len(res)-1 {

        results[i] = []string{text[m[0]:m[1]], text[m[1]:res[i+1][0]]}

    } else {

        results[i] = []string{text[m[0]:m[1]], text[m[1]:]}

    }

}


fmt.Printf("%q\n", results)

應該打印


[["A." "英國、法國"] ["B." "加拿大、墨西哥\n"] ["C." "葡萄牙、加拿大"] ["D." "墨西哥、德國\n"]]


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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