string - poner - solo mayuscula vb net
Búsqueda de cadenas insensibles a mayúsculas en Golang (4)
¿Cómo busco en un archivo una palabra de una manera que no distingue entre mayúsculas y minúsculas ?
Por ejemplo
Si estoy buscando UpdaTe
en el archivo, si el archivo contiene actualización, la búsqueda debería seleccionarlo y contarlo como una coincidencia.
No use strings.Contains
menos que necesite una coincidencia exacta en lugar de búsquedas de cadenas correctas en el idioma
Ninguna de las respuestas actuales es correcta a menos que solo esté buscando caracteres ASCII en la mayoría de los idiomas (como el inglés) sin cierta diéresis / diéresis u otros modificadores de glifos de Unicode (la forma más "correcta" de definirlo como lo menciona @snap). La frase de Google estándar es "buscar caracteres no ASCII".
Para obtener el soporte adecuado para la búsqueda de idiomas, debe utilizar http://golang.org/x/text/search .
func SearchForString(str string, substr string) (int, int) {
m := search.New(language.English, search.IgnoreCase)
return = m.IndexString(str, substr)
}
start, end := SearchForString(''foobar'', ''bar'');
if start != -1 && end != -1 {
fmt.Println("found at", start, end);
}
O si solo quieres el índice de inicio:
func SearchForStringIndex(str string, substr string) (int, bool) {
m := search.New(language.English, search.IgnoreCase)
start, _ := m.IndexString(str, substr)
if start == -1 {
return 0, false
}
return start, true
}
index, found := SearchForStringIndex(''foobar'', ''bar'');
if found {
fmt.Println("match starts at", index);
}
Busque el language.Tag
Haga clic aquí para buscar el idioma con el que desea buscar o usar el language.Und
si no está seguro.
Actualizar
Parece que hay cierta confusión, por lo que este siguiente ejemplo debería ayudar a aclarar las cosas.
package main
import (
"fmt"
"strings"
"golang.org/x/text/language"
"golang.org/x/text/search"
)
var s = `Æ`
var s2 = `Ä`
func main() {
m := search.New(language.Finnish, search.IgnoreDiacritics)
fmt.Println(m.IndexString(s, s2))
fmt.Println(CaseInsensitiveContains(s, s2))
}
// CaseInsensitiveContains in string
func CaseInsensitiveContains(s, substr string) bool {
s, substr = strings.ToUpper(s), strings.ToUpper(substr)
return strings.Contains(s, substr)
}
Presumiblemente, la parte importante de su pregunta es la búsqueda, no la parte sobre la lectura de un archivo, así que solo responderé esa parte.
Probablemente, la forma más sencilla de hacerlo es convertir ambas cadenas (la que está buscando y la que está buscando) en mayúsculas o en minúsculas, y luego buscar. Por ejemplo:
func CaseInsensitiveContains(s, substr string) bool {
s, substr = strings.ToUpper(s), strings.ToUpper(substr)
return strings.Contains(s, substr)
}
Puedes verlo en acción here .
Si su archivo es grande, puede usar regexp y bufio:
//create a regex `(?i)update` will match string contains "update" case insensitive
reg := regexp.MustCompile("(?i)update")
f, err := os.Open("test.txt")
if err != nil {
log.Fatal(err)
}
defer f.Close()
//Do the match operation
//MatchReader function will scan entire file byte by byte until find the match
//use bufio here avoid load enter file into memory
println(reg.MatchReader(bufio.NewReader(f)))
El paquete bufio implementa un lector de búfer que puede ser útil tanto por su eficiencia con muchas lecturas pequeñas como por los métodos de lectura adicionales que proporciona.
strings.EqualFold()
puede verificar si dos cadenas son iguales, mientras ignora el caso. Incluso funciona con Unicode. Consulte http://golang.org/pkg/strings/#EqualFold para obtener más información.
http://play.golang.org/p/KDdIi8c3Ar
package main
import (
"fmt"
"strings"
)
func main() {
fmt.Println(strings.EqualFold("HELLO", "hello"))
fmt.Println(strings.EqualFold("ÑOÑO", "ñoño"))
}
Ambos devuelven la verdad.