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.

Optimizar regex para leer fechas

He desarrollado una expresión regular para usar en un .NET WebAPI que obtiene una fecha y un código de control a partir de una entrada dada ya formateada en el formato final.

He probado la expresión regular para evitar usar múltiples divisiones de cadenas.

He estado utilizando Regex101 para probar mi expresión y tengo una que ya funciona como se esperaba, pero creo que es demasiado grande para lo que hace.

Expresión:

^([0-9]{2})+([0-9]{2})+([0-9]{2})[0-9](M|F)([0-9]{2})+([0-9]{2})+([0-9]{2})

// Obtener en formato Año, Mes, Día, Código (M|F), Año, Mes, Día

Entrada:

7603259M2209058PRT<<<<<<<<<<<<<8

¿Tienes alguna sugerencia para simplificarlo?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, no tengo el contexto para entender los requisitos y restricciones específicas de tu proyecto. Sin embargo, tengo algunas sugerencias generales:

    1. Utiliza grupos de captura para extraer la fecha y el código. De esta manera, puedes obtener los valores directamente en lugar de depender de manipulación de cadenas más adelante.
    2. Puedes simplificar la expresión regular utilizando las clases de caracteres abreviadas para dígitos y caracteres alfanuméricos (\d y \w, respectivamente).

    3. Dependiendo de los posibles valores del código (M o F), también puedes usar una clase de caracteres para coincidir con cualquiera de ellos.

    Aquí tienes un ejemplo de una expresión regular simplificada que logra el mismo resultado:

    ^(\d{2})(\d{2})(\d{2})([MF])\d{7}

    Esta expresión regular captura el año, mes, día y grupo de código (ya sea M o F), seguido de siete dígitos que no se capturan.

    Nuevamente, esto puede no ser la solución más óptima para tu proyecto específico, pero espero que te dé algunas ideas sobre cómo simplificar tu expresión regular.

Comments are closed.