En Python es relativamente fácil comparar si dos cadenas de caracteres son iguales, solamente se tiene que utilizar el operador comparación (==
). Pero esta forma de comparar diferencia entre mayúsculas y minúsculas, cosa que en muchos casos no es lo que se quiere. También nos podemos encontrar con el problema de espacios en blanco introducidos accidentalmente. Además de estos, otro problema adicional que nos podemos encontrar a la hora de comparar cadenas de texto es la existencia de acentos. Algunos usuarios pueden que accedan con teclados que no permiten escribirlos, o por lo menos de una forma fácil, lo que hace que se puedan emitir. Hoy vamos a ver tanto como se pueden ignorar los acentos al comparar cadenas de texto, eliminar espacios y la diferencias entre mayúsculas o minúsculas.
Ignorar diferencias entre mayúsculas o minúsculas a la hora de comparar
Posiblemente la tarea más sencilla sea comparar dos cadenas de texto sin tener en cuenta la diferencia entre mayúsculas o minúsculas. Python no tiene una función que permite esto, pero las cadenas de texto si que tienen métodos que pueden convertir una cadena en mayúsculas (upper
) o minúsculas (lower
). Así que, si convertimos las dos cadenas de texto que deseamos comparar a minúsculas, o mayúsculas, se puede obtener el efecto deseado. Algo que se puede ver en el siguiente ejemplo:
string_1 = "hola" string_2 = "Hola" string_1 == string_2 # False string_1.lower() == string_2.lower() # True string_1.upper() == string_2.upper() # True
Ignorar espacios en blanco
Si existiesen espacios en blanco en la cadena de texto se pueden eliminar con el método strip
. Eliminando tanto los que aparecen antes como después de las cadenas. Así, para evitar el problema de los espacios en blanco se puede hacer lo mismo que con la diferenciación entre mayúsculas y minúsculas. Aplicar el método antes de realizar la comparación como se muestra en el siguiente ejemplo:
string_1 = "Hola" string_2 = "Hola " string_1 == string_2 # False string_1.strip() == string_2.strip() # True
Ignorar acentos
En el caso de lo acentos en más complejo que los dos anteriores. Python no dispone una función nativa para tratar los acentos, pero se puede usar el paquete unicodedata
. En este se encuentra la función normalize
que devuelve la forma normalizada de una cadena Unicode, es decir, la forma sin acentos o signos diacríticos. Lo que se puede conseguir con el siguiente ejemplo:
import unicodedata string_1 = 'función' unicodedata.normalize('NFKD', string_1).encode('ASCII', 'ignore') # función
Siendo NFKD
una de las formas de normalización existentes en Unicode.
Hay que tener en cuenta que esta función también convierte la ñ y ç en n y c respectivamente. Cosa que podría no ser lo deseado en algunos casos.
unicodedata.normalize('NFKD', "Peña").encode('ASCII', 'ignore') # Pena
Combinar lo visto para comparar cadenas de texto
Todo lo que se ha visto se puede combinar para comparar cadenas de texto. Por ejemplo, se puede ver como la síguete línea compara dos cadenas con todos los casos vistos.
import unicodedata string_1 = 'función' string_2 = "Función " unicodedata.normalize('NFKD', string_1).encode('ASCII', 'ignore').strip().lower() == unicodedata.normalize('NFKD', string_2).encode('ASCII', 'ignore').strip().lower()
Conclusiones
En esta entrada se ha visto cómo ignorar acentos al comparar cadenas de texto además de espacios en blanco y no diferenciar entre mayúsculas o minúsculas. Algo que puede ser útil cuando necesitamos comparar texto que ha sido introducido por un usuario y puede contener errores.
Imagen de cocoparisienne en Pixabay
Alberto dice
Me ha gustado mucho esta publicación. Mis 10s
juan dice
Sin duda esto me será de ayuda.