Ahora, por supuesto, podría escribir mi expresión regular para manejar ambos casos, por ejemplo regexp.Compile("[a-zA-Z]")
, pero mi expresión regular se construye a partir de una cadena dada por el usuario:
reg, err := regexp.Compile(strings.Replace(s.Name, " ", "[ \\._-]", -1))
¿Dónde s.Name
está el nombre? Que podría ser algo así como "North by Northwest". Ahora, la solución más aparente para mí sería recorrer cada carácter de s.Name
y escribir '[nN]' para cada letra:
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]))
}
}
Pero creo que esta es una solución bastante poco elegante. La velocidad no es realmente una preocupación, pero necesito saber si hay otra forma.
Puede agregar un
(?i)
al principio del patrón para que no distinga entre mayúsculas y minúsculas.Referencia
fuente
No estoy muy familiarizado con Go, pero de acuerdo con este ejemplo: http://play.golang.org/p/WgpNhwWWuW
Necesita prefijar su declaración de expresiones regulares con
(?i)
fuente
Usa la
i
bandera. Citando la documentación de la sugerencia :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)
fuente