Introducción a patrones de cadenas
Parte de la sección Logic & Flow del Journey de Lua de Coddy — lección 36 de 54.
Cuando usaste string.gsub() en la lección anterior, buscaste texto exacto como espacios o palabras específicas. Pero, ¿qué pasa si necesitas encontrar "cualquier dígito" o "cualquier letra" sin conocer el carácter exacto? Aquí es donde entran en juego los patrones de cadenas.
Los patrones de cadenas en Lua son una forma de describir qué tipo de texto estás buscando, en lugar del texto exacto en sí. Son más simples que las expresiones regulares, pero lo suficientemente potentes para la mayoría de las tareas de procesamiento de texto.
Lua proporciona códigos especiales llamados clases de caracteres que coinciden con categorías de caracteres. Aquí están los más comunes:
%d -- coincide con cualquier dígito (0-9)
%a -- coincide con cualquier letra (a-z, A-Z)
%s -- coincide con cualquier espacio en blanco (espacio, tabulación, nueva línea)
%w -- coincide con cualquier carácter alfanumérico (letras y dígitos)
%p -- coincide con cualquier carácter de puntuaciónAquí tienes cómo podrías usar estos patrones con string.find() para localizar el primer dígito en una cadena:
local text = "Room 42 is available"
local position = string.find(text, "%d")
print(position) -- Resultado: 6También puedes usar versiones en mayúsculas de estas clases para que coincidan con lo opuesto. Por ejemplo, %D coincide con cualquier carácter que no sea un dígito, y %A coincide con cualquier carácter que no sea una letra.
Desafío
FácilEscribe una función containsDigit que recibe text y devuelve si el texto contiene al menos un dígito.
Usa string.find() con la clase de caracteres %d para comprobar si existe algún dígito en la cadena.
Parámetros:
text(string): El texto en el que buscar dígitos
Devuelve: true si el texto contiene al menos un dígito, false en caso contrario (boolean)
Hoja de referencia
Los patrones de cadenas en Lua describen qué tipo de texto estás buscando, en lugar del texto exacto en sí.
Lua proporciona códigos especiales llamados clases de caracteres que coinciden con categorías de caracteres:
%d -- matches any digit (0-9)
%a -- matches any letter (a-z, A-Z)
%s -- matches any whitespace (space, tab, newline)
%w -- matches any alphanumeric character (letters and digits)
%p -- matches any punctuation characterPuedes usar versiones en mayúsculas para coincidir con lo opuesto. Por ejemplo, %D coincide con cualquier carácter que no sea un dígito, y %A coincide con cualquier carácter que no sea una letra.
Uso de clases de caracteres con string.find():
local text = "Room 42 is available"
local position = string.find(text, "%d")
print(position) -- Output: 6Pruébalo tú mismo
function containsDigit(text)
-- Escribe el código aquí
end
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Logic & Flow
1Iteración avanzada de tablas
Iterar con pairs()Iterar con ipairs()pairs() vs. ipairs()Resumen - Ficha de personaje4Introducción a las Metatablas
¿Qué es una Metatabla?setmetatable y getmetatableEl metamétodo __indexEl metamétodo __newindexEl metamétodo __tostringMetamétodos aritméticos - Parte 1Metamétodos aritméticos - Parte 2Resumen - Tablas de solo lectura7Manipulación avanzada de cadenas
string.gsub() para sustituciónIntroducción a patrones de cadenasstring.find()string.match()Iteración con string.gmatch()Resumen - Analizador de archivos Log2Más funciones de la librería table
table.concat()Construcción de tablas y unpack()table.sort()Ordenamiento personalizado con funcionesRepaso - Tabla de puntuaciones altas