Ora, naturalmente, ho potuto scrivere la mia espressione regolare per gestire entrambi i casi, come regexp.Compile("[a-zA-Z]")
, ma la mia espressione regolare è costruito da una stringa dato dall'utente:Come faccio un'espressione regolare senza distinzione tra maiuscole e minuscole in Go?
reg, err := regexp.Compile(strings.Replace(s.Name, " ", "[ \\._-]", -1))
Dove s.Name
è il nome. Quale potrebbe essere qualcosa come "North by Northwest". Ora, la soluzione più evidente per me sarebbe quella di camminare attraverso ogni carattere di s.Name
e scrivere '[nn]' per ogni lettera:
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]))
}
}
Ma sento che questo è un piuttosto non-soluzione elegante. La velocità non è davvero una preoccupazione, ma ho bisogno di sapere se c'è un altro modo.
ma ho trovato questo è troppo lento, quando ci sono molti dati. A causa del richiamo di unicode.SimpleFold in regexp.Match, quindi suggerisco di cambiare le lettere in upper e di usare regexp in modo che corrisponda. Questa è la velocità. Ciò che segue è il tempo di dati: (? I) '' ' #By regexp di ignorare caso XCMP/bin/otacmp -o BSP_2.2.0.html -f BSP/quadri -f Codice/quadri 1271.94s utente Sistema 7.32s 97% CPU 21: 54.95 totale #By toUpper and match XCMP/bin/otacmp -o BSP_2.2.0.html -f BSP/framework -f Codice/framework 263.87s utente 8.99s sistema 110% cpu 4 : 06.44 totale '' ' – QJGui