這是一個(gè)選擇題示例。我想在golang的以下代碼內(nèi)容中獲取“英國、法國”、“加拿大、墨西哥”、“葡萄牙、加拿大”、“印度、德國”等中文文本,但它不起作用。package mainimport ( "fmt" "regexp" "testing")func TestRegex(t *testing.T) { text := `( B )38.目前,亞馬遜美國站后臺(tái),除了有美國站點(diǎn)外,還有( )站點(diǎn)。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.目前,亞馬遜美國站后臺(tái),除了有美國站點(diǎn)外,還有( )站點(diǎn)。A.英國、法國B.加拿大、墨西哥C.葡萄牙、加拿大D.墨西哥、德國圖案:[A-E]\.(\S+)?實(shí)際結(jié)果:[["A.英國、法國B.加拿大、墨西哥" "英國、法國B.加拿大、墨西哥"] ["C.葡萄牙、加拿大D.墨西哥、德國" "葡萄牙、加拿大D.墨西哥、德國"]]。預(yù)期結(jié)果:[["A.英國、法國" "英國、法國"] ["B.加拿大、墨西哥" "加拿大、墨西哥"] ["C.葡萄牙、加拿大" "葡萄牙、加拿大"] ["D.墨西哥、德國" "墨西哥、德國"]]我認(rèn)為這可能是一個(gè)貪婪模式問題。因?yàn)樵谖业拇a中,它直接將選項(xiàng) A 和選項(xiàng) B 讀取為一個(gè)選項(xiàng)。
1 回答

隔江千里
TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超10個(gè)贊
非貪心匹配不能解決這個(gè)問題,你需要正向前瞻,而re2不支持。
作為一種解決方法,可以只搜索標(biāo)簽并手動(dòng)提取其間的文本。
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)
應(yīng)該打印
[["A." "英國、法國"] ["B." "加拿大、墨西哥\n"] ["C." "葡萄牙、加拿大"] ["D." "墨西哥、德國\n"]]
- 1 回答
- 0 關(guān)注
- 148 瀏覽
添加回答
舉報(bào)
0/150
提交
取消