猿问

正则表达式匹配重复字符

如果字符串中有 3 个或更多重复字符(例如 aaaaaa、testtttttt、otttttter),我正在尝试创建一个匹配字符串的正则表达式。


我尝试了以下方法:


regexp.Compile("[A-Za-z0-9]{3,}")

regexp.Compile("(.){3,}")

regexp.Compile("(.)\\1{3,}")

连续匹配任意3 个字符,但不匹配连续字符...我哪里出错了?


Helenr
浏览 258回答 3
3回答

慕无忌1623718

你所要求的不能用真正的正则表达式来完成,你需要的是(不规则的)反向引用。虽然许多正则表达式引擎实现了它们,但 Go 使用的 RE2 没有。RE2 是一个快速的正则表达式引擎,可以保证线性时间字符串处理,但是没有已知的方法可以以这种效率实现反向引用。(有关更多信息,请参阅https://swtch.com/~rsc/regexp/。)要解决您的问题,您可能需要搜索其他一些正则表达式库。我相信可以找到 PCRE 的绑定,但我没有个人经验。另一种方法是在不使用 (ir) 正则表达式的情况下手动解析字符串。

绝地无双

由于上述问题,我最终确定了以下非正则表达式解决方案:norm = "this it a ttttt"repeatCount := 1thresh := 3lastChar := ""for _, r := range norm {    c := string(r)    if c == lastChar {        repeatCount++        if repeatCount == thresh {            break        }    } else {        repeatCount = 1    }    lastChar = c}

万千封印

这是丑陋的解决方案,您可以自动生成它:A{3,}|B{3,}|...|Z{3,}|a{3,}|b{3,}|...|z{3,}|0{3,}|1{3,}|...|9{3,}
随时随地看视频慕课网APP

相关分类

Go
我要回答