Теперь, конечно, я мог бы написать свое регулярное выражение для обработки обоих случаев, например 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]))
}
}
Но мне кажется, что это довольно не элегантное решение. Скорость на самом деле не проблема, но мне нужно знать, есть ли другой способ.
Вы можете добавить
(?i)
в начало шаблона, чтобы сделать его нечувствительным к регистру.Справка
источник
Я не слишком знаком с Go, но, согласно этому примеру: http://play.golang.org/p/WgpNhwWWuW
Вам нужно префикс вашего выражения регулярного выражения с помощью
(?i)
источник
Используйте
i
флаг. Цитата из документации по подсказке :i case-insensitive (default false) m multi-line mode: ^ and $ match begin/end line in addition to begin/end text (default false) s let . match \n (default false) U ungreedy: swap meaning of x* and x*?, x+ and x+?, etc (default false)
источник