Теперь, конечно, я мог бы написать свое регулярное выражение для обработки обоих случаев, например regexp.Compile("[a-zA-Z]")
, но мое регулярное выражение построено из строки, заданной пользователем:
reg, err := regexp.Compile(strings.Replace(s.Name, " ", "[ \\._-]", -1))
Где s.Name
- это имя. Что может быть что-то вроде "Север на северо-западе". Теперь самым очевидным решением для меня было бы пройти через каждый символ s.Name
и записать "[nN]" для каждой буквы:
for i := 0; i < len(s.Name); i++ {
if s.Name[i] == " " {
fmt.Fprintf(str, "%s[ \\._-]", str);
} else {
fmt.Fprintf(str, "%s[%s%s]", str, strings.ToLower(s.Name[i]), strings.ToUpper(s.Name[i]))
}
}
Но я считаю, что это довольно не элегантное решение. Скорость на самом деле не вызывает беспокойства, но мне нужно знать, есть ли другой способ.