I need to split a string like "aa bb cc dd ee ff" in golang to
["aa bb" "bb cc" "cc dd" "dd ee" "ee ff"]
I'm trying this:
re := regexp.MustCompile("[a-z]+\\s+[a-z]+")
fmt.Printf("%q
", re.FindAllString("aa bb cc dd ee ff", -1))
But it returns:
["aa bb" "cc dd" "ee ff"]
For example,
package main
import (
"fmt"
"strings"
)
func pairs(s string) []string {
var p []string
fs := strings.Fields(s)
if len(fs) >= 2 {
p = make([]string, 0, len(fs)-1)
for i, f := range fs[1:len(fs)] {
p = append(p, fs[i]+" "+f)
}
}
return p
}
func main() {
s := "aa bb cc dd ee ff"
fmt.Printf("%q
", s)
p := pairs(s)
fmt.Printf("%q
", p)
}
Output:
"aa bb cc dd ee ff"
["aa bb" "bb cc" "cc dd" "dd ee" "ee ff"]
You forget to say that it's a repeating pattern:
([a-z]+\\s+[a-z]+)*
The solution ((?=([a-z]{2}\s+[a-z]{2})*)
) needs lookahead which is not available in go