I'm trying to compile a regex so that I can extract an 8 digit number with/without spaces between the digits from a string using Go. For some reasons the compilations fails. What should I repalce K with ?
validAcc, err := regexp.Compile(`[ ]\K(?<!\d )(?=(?: ?\d){8})(?!(?: ?\d){9})\d[ \d]+\d`)
if err != nil {
return
}
More code with sample data
package main
import "strings"
import "regexp"
import "fmt"
func main() {
msg := ` 12 34 56 78 //the number we need
12 3455678 90123455 // the number we don't need`
acc, err := accFromText(msg)
if err != nil {
panic(err)
}
exAcc := "12345678"
if acc != exAcc {
fmt.Printf("expected %v, received %v", exAcc, acc)
}
msg = `
More details here
1234567 12345 123456789 asd
12000000000 a number we don't need
12 3456 78 //this is the kind of number we need
12 3455678 90123455 // the number we don't need`
acc, err = accFromText(msg)
if err != nil {
panic(err)
}
exAcc = "12345678"
if acc != exAcc {
fmt.Printf("expected %v, received %v", exAcc, acc)
}
}
func accFromText(msg string) (accNumber string, err error) {
validAcc, err := regexp.Compile(`[ ]\K(?<!\d )(?=(?: ?\d){8})(?!(?: ?\d){9})\d[ \d]+\d`)
if err != nil {
return
}
accNumber = string(validAcc.Find([]byte(msg)))
accNumber = strings.Replace(accNumber, " ", "", -1)
return
}