Filtrado Avanzado de Cadenas
Técnicas de Procesamiento de Cadenas Complejas
El filtrado avanzado de cadenas va más allá de la coincidencia básica de patrones, permitiendo estrategias sofisticadas de manipulación y validación de texto.
Aserciones de Lookahead y Lookbehind
Lookahead Positivo
Coincide con un patrón solo si está seguido de un patrón específico.
Pattern p = Pattern.compile("\\w+(?=@labex\\.io)");
Matcher m = p.matcher("[email protected] [email protected]");
while (m.find()) {
System.out.println(m.group()); // Prints usernames
}
Lookahead Negativo
Coincide con un patrón que no está seguido de un patrón específico.
Pattern p = Pattern.compile("\\d+(?!px)");
Matcher m = p.matcher("100px 200 300px");
while (m.find()) {
System.out.println(m.group()); // Prints 200
}
Flujo de Trabajo de Filtrado
graph TD
A[Input String] --> B[Regex Pattern]
B --> C{Advanced Filtering}
C -->|Lookahead| D[Conditional Matching]
C -->|Replacement| E[Text Transformation]
C -->|Splitting| F[String Segmentation]
Técnicas de Filtrado Avanzado
1. Reemplazos Complejos
Reemplaza patrones con lógica sofisticada.
String input = "Price: $45.99, Discount: 20%";
String filtered = input.replaceAll(
"\\$(\\d+\\.\\d+)",
match -> {
double price = Double.parseDouble(match.group(1));
return String.format("$%.2f", price * 0.9);
}
);
2. Filtrado Condicional
List<String> emails = Arrays.asList(
"[email protected]",
"[email protected]",
"[email protected]"
);
List<String> filteredEmails = emails.stream()
.filter(email -> email.matches(".*@labex\\.io"))
.collect(Collectors.toList());
Estrategias de Filtrado Avanzado
Estrategia |
Descripción |
Caso de Uso |
Lookahead |
Coincidencia condicional |
Validación con contexto |
Coincidencia Negativa |
Excluir patrones específicos |
Limpieza de datos |
Transformación |
Reemplazos complejos |
Normalización de texto |
Optimización de Rendimiento
- Compila los patrones una vez.
- Utiliza grupos no capturadores.
- Minimiza el retroceso.
- Aprovecha las operaciones de flujo.
Escenarios de Filtrado del Mundo Real
Procesamiento de Archivos de Registro
String logPattern = "(?<timestamp>\\d{4}-\\d{2}-\\d{2}) " +
"(?<level>ERROR|WARN) " +
"(?<message>.*)";
Pattern p = Pattern.compile(logPattern);
Validación de Datos
String passwordRegex = "^(?=.*[A-Z])" + // At least one uppercase
"(?=.*[a-z])" + // At least one lowercase
"(?=.*\\d)" + // At least one digit
".{8,}$"; // Minimum 8 characters
Consejos Profesionales de LabEx
- Entiende la complejidad de las regex.
- Prueba los patrones de forma incremental.
- Utiliza herramientas en línea de visualización de regex.
- Considera las implicaciones de rendimiento.
Dominar el filtrado avanzado de cadenas permite a los desarrolladores manejar eficientemente los desafíos complejos de procesamiento de texto.