es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , ,

Answer

  1. Avatar for 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:

    String numRange = obtenerDelUsuario();
    Pattern pattern = Pattern.compile("([0-9]+\\.?[0-9]*)-([0-9]+\\.?[0-9]*)%?");
    Matcher matcher = pattern.matcher(numRange);
    if (matcher.matches()) {
        String lowRangeVal = matcher.group(1);
        String highRangeVal = matcher.group(2);
    
        // continuar procesando aquí
    }
    

    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 ?.

Comments are closed.