csharp-expresion-regular-yyymmdd

Nuevo tutorial de C#, ahora trabajando con Expresiones Regulares.

En este ejemplo, formatearemos una fecha que viene con formato YYYY-MM-DD y la dejaremos con formato tradicional dd/mm/yyyy.

Aqui usaremos el objeto Regex del Framework .NET para realizar esta operacion.

Primero, tenemos que construir un patron de busqueda para la fecha que queremos formatear.

Aqui ocuparemos paréntesis triangulares “<>” que permite “nombrar” estos grupos de la siguiente forma:

“^(?<Día>\d\d)/(?\d\d)/(?<Año>\d\d\d\d)$”.

Con lo cual se le especifica al motor de búsqueda que los primeros dos dígitos encontrados llevarán la etiqueta “Día”, los segundos la etiqueta “Mes” y los últimos cuatro dígitos llevarán la etiqueta “Año” (Definicion de Wikipedia).

Tomando esto como referente, construiremos nuestro patron de busqueda que tendra esta expresion regular:

@”\b(?<yyyy>\d{4})-(?<mm>\d{1,2})-(?<dd>\d{1,2})\b”

yyyy: indica que los 4 primeros caracteres seran el año.
mm: tendra de 1 a 2 caracteres para el mes.
dd: tendra de 1 a 2 caracteres para el dia.

Ahora, definiremos el string que hara el “reemplazo” de la fecha por el formato final:

“${dd}/${mm}/${yyyy}”

Segun el formulario (imagen inicial), tendremos un textbox con el formato original de la fecha que se cargara de esta forma en el load:


private void Form4_Load(object sender, EventArgs e)
{
txtFecha.Text = DateTime.Now.ToString("yyyy-MM-dd");
}

En el boton de la conversion ocuparemos el metodo Regex.Replace() y los patrones que anteriormente definimos de la siguiente manera:


string fechaConFormato = string.Empty;

//formatea la fecha si viene en formato yyyy-mm-dd
fechaConFormato = Regex.Replace(txtFecha.Text,
@"\b(?<yyyy>\d{4})-(?<mm>\d{1,2})-(?<dd>\d{1,2})\b",
"${dd}/${mm}/${yyyy}");

txtFechaFormato.Text = fechaConFormato;

El codigo al presionarse el boton se vera de esta forma:

csharp-expresion-regular-yyymmdd-02

El Regex.Relace en su primer parametro es el texto a analizar, el segundo el patron que busca y asigna a variables lo que encontro y finalmente la salida que quiero tener en base a los datos encontrados.

Y si alguien pregunta ¿que pasa si la fecha no viene con el formato esperado? Simplemente el Regex ignora la busqueda y devuelve el mismo texto sin formato.

Bueno, aqui termina este mini-tutorial de C# y Expresiones Regulares.

TYDW.-