Теперь, конечно, я мог бы написать свое регулярное выражение для обработки обоих случаев, например 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]))
}
}
Но мне кажется, что это довольно не элегантное решение. Скорость на самом деле не проблема, но мне нужно знать, есть ли другой способ.