3 回答

TA貢獻1744條經驗 獲得超4個贊
你所要求的不能用真正的正則表達式來完成,你需要的是(不規則的)反向引用。雖然許多正則表達式引擎實現了它們,但 Go 使用的 RE2 沒有。RE2 是一個快速的正則表達式引擎,可以保證線性時間字符串處理,但是沒有已知的方法可以以這種效率實現反向引用。(有關更多信息,請參閱https://swtch.com/~rsc/regexp/。)
要解決您的問題,您可能需要搜索其他一些正則表達式庫。我相信可以找到 PCRE 的綁定,但我沒有個人經驗。
另一種方法是在不使用 (ir) 正則表達式的情況下手動解析字符串。

TA貢獻1946條經驗 獲得超4個贊
由于上述問題,我最終確定了以下非正則表達式解決方案:
norm = "this it a ttttt"
repeatCount := 1
thresh := 3
lastChar := ""
for _, r := range norm {
c := string(r)
if c == lastChar {
repeatCount++
if repeatCount == thresh {
break
}
} else {
repeatCount = 1
}
lastChar = c
}

TA貢獻1891條經驗 獲得超3個贊
這是丑陋的解決方案,您可以自動生成它:
A{3,}|B{3,}|...|Z{3,}|a{3,}|b{3,}|...|z{3,}|0{3,}|1{3,}|...|9{3,}
- 3 回答
- 0 關注
- 255 瀏覽
添加回答
舉報