Extrayendo porcentajes dentro de un rango con expresiones regulares.
Estoy aceptando una cadena de entrada del usuario y tratando de determinar si coincide con una expresión regular. Si lo hace, necesito extraer ciertos grupos coincidentes de la entrada y procesarlos.
La cadena válida debe tener la siguiente forma:
- 1 número que puede consistir en enteros o números decimales (con punto decimal)
- seguido de un guión (“-“)
- seguido de otro número (igual al primero)
- opcionalmente finalizado con un signo de porcentaje (“%”)
Ejemplos de entradas de cadena válidas:
- “6-9”
- “6.5-9”
- “6-9.24”
- “6-9%”
- “6.5-9%”
- “6.24-9.23%”
Mi mejor intento:
String numRange = obtenerDelUsuario();
Pattern pattern = Pattern.compile("([0-9]{1,2}\\.[0-9]{1,2})-([0-9]{1,2}\\.[0-9]{1,2})[%]*");
Matcher matcher = pattern.matcher(numRange);
if (matcher.matches()) {
String lowRangeVal = matcher.group(1);
String highRangeVal = matcher.group(2);
// continuar procesando aquí
}
No funciona. ¿Alguien puede ver dónde estoy fallando?
davy.ai
Su patrón de regex no está permitiendo valores enteros, solo valores decimales. Para solucionarlo, puede modificar el patrón para permitir enteros o decimales:
Aquí, el patrón
([0-9]+\.?[0-9]*)
coincide con uno o más dígitos, seguido opcionalmente de un punto y cero o más dígitos (permitiendo tanto enteros como decimales), seguido del guion y luego el mismo patrón para el segundo número. El signo de porcentaje también se hace opcional mediante el uso del carácter?
.