Teraz, oczywiście, mógłbym napisać moje wyrażenie regularne, aby obsłużyć oba przypadki, na przykład regexp.Compile("[a-zA-Z]")
, ale moje wyrażenie regularne jest zbudowane z ciągu podanego przez użytkownika:
reg, err := regexp.Compile(strings.Replace(s.Name, " ", "[ \\._-]", -1))
Gdzie s.Name
jest nazwa. Może to być coś w rodzaju „North by Northwest”. Teraz najbardziej oczywistym rozwiązaniem byłoby dla mnie przejście przez każdy znak s.Name
i napisanie „[nN]” dla każdej litery:
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]))
}
}
Ale wydaje mi się, że to raczej mało eleganckie rozwiązanie. Szybkość nie jest tak naprawdę problemem, ale muszę wiedzieć, czy jest inny sposób.