package region import ( "regexp" "strings" ) var spaceRE = regexp.MustCompile(`\s+`) var edgePunctRE = regexp.MustCompile(`^[\s\.,!\?;:"'«»\(\)\[\]\{\}]+|[\s\.,!\?;:"'«»\(\)\[\]\{\}]+$`) func Normalize(input string) string { s := strings.TrimSpace(strings.ToLower(input)) s = strings.ReplaceAll(s, "ё", "е") s = strings.ReplaceAll(s, "-", " ") s = strings.ReplaceAll(s, "г.", "город ") s = strings.ReplaceAll(s, "обл.", "обл") s = edgePunctRE.ReplaceAllString(s, "") s = strings.Map(func(r rune) rune { switch r { case '.', ',', '!', '?', ';', ':', '"', '\'', '«', '»', '(', ')', '[', ']', '{', '}': return ' ' default: return r } }, s) return spaceRE.ReplaceAllString(strings.TrimSpace(s), " ") }