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.
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
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
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 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() 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
En un entrada previa explicamos qué son el WOE y el IV y por qué…
Seguimos evolucionando el laboratorio de Analytics Lane y hoy lanzamos la versión 1.1, disponible en:…
“El interés compuesto es la octava maravilla del mundo. El que lo entiende lo gana…
Tienes los datos de ventas de tres productos en dos años distintos y quieres saber…
Imagina la situación. Tu equipo lleva tres años con un modelo en producción. No es…
Cuando un banco evalúa una solicitud de crédito necesita responder a una pregunta aparentemente simple:…
This website uses cookies.