正则表达式查找长度为n的重复数

时间:2019-04-14 09:20:05

标签: regex go

我正在尝试使用golang regexp查找数字的重复。这是我尝试查找长度为8的重复数字的方法。我试图遵循Regex to find repeating numbers

的建议
    testString := "11111111" 
    repetitive := `^(\d)\\1{8}$`
    repetitiveR := regexp.MustCompile(repetitive)
    if repetitiveR.MatchString(testString) {
        fmt.Println("Match")
    } else {
        fmt.Println("No match")
    }

它总是给我结果“不匹配”。另一种有效的方法是麻烦的

  testString := "11111111" 
  repetitive := `^(0{8})|(1{8})|(2{8})|(3{8})|(4{8})|(5{8})|(6{8})|(7{8})|(8{8})|(9{8})$`
  repetitiveR := regexp.MustCompile(repetitive)
  if repetitiveR.MatchString(testString) {
    fmt.Println("Match")
  } else {
    fmt.Println("No match")
  }

输出:匹配

任何建议

1 个答案:

答案 0 :(得分:1)

如果您需要在字符串的开头精确捕获与单个单词相同的八个重复数字,则此方法有效:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    testString := "11111111"
    repetitive := "^0{8}$|^1{8}$|^2{8}$|^3{8}$|^4{8}$|^5{8}$|^6{8}$|^7{8}$|^8{8}$|^9{8}$"
    repetitiveR := regexp.MustCompile(repetitive)
    if repetitiveR.MatchString(testString) {
        fmt.Println("Match")
    } else {
        fmt.Println("No match")
    }
}

注意:例如,您的繁琐正则表达式将捕获8个以上数字的单词,因此我已对其进行了一些纠正。

来自official GitHub,并在评论中提到:

  

RE2不支持为其构造   仅已知存在回溯解决方案。因此,反向引用   和环顾四周断言

另外,this answer在您遇到的情况中可能会有所帮助。