Exemplo de expressão regular: alterando formatos de data

O exemplo de código a seguir usa o Regex.Replace método para substituir datas que têm o formulário mm/dd/yyy por datas que têm o formulário dd-mm-yy.

Warning

O uso irrestrito de System.Text.RegularExpressions com entrada não confiável pode expor aplicativos a ataques de negação de serviço. Consulte as práticas recomendadas para expressões regulares no .NET para obter diretrizes sobre como usar com segurança .NET expressões regulares com entrada não confiável.

Example

static string MDYToDMY(string input)
{
   try {
      return Regex.Replace(input,
             @"\b(?<month>\d{1,2})/(?<day>\d{1,2})/(?<year>\d{2,4})\b",
            "${day}-${month}-${year}", RegexOptions.None,
            TimeSpan.FromMilliseconds(150));
   }
   catch (RegexMatchTimeoutException) {
      return input;
   }
}
Function MDYToDMY(input As String) As String
    Try
        Return Regex.Replace(input, _
               "\b(?<month>\d{1,2})/(?<day>\d{1,2})/(?<year>\d{2,4})\b", _
               "${day}-${month}-${year}", RegexOptions.None,
               TimeSpan.FromMilliseconds(150))
    Catch e As RegexMatchTimeoutException
        Return input
    End Try
End Function

O código a seguir mostra como o MDYToDMY método pode ser chamado em um aplicativo.

using System;
using System.Globalization;
using System.Text.RegularExpressions;

public class Class1
{
   public static void Main()
   {
      string dateString = DateTime.Today.ToString("d",
                                        DateTimeFormatInfo.InvariantInfo);
      string resultString = MDYToDMY(dateString);
      Console.WriteLine($"Converted {dateString} to {resultString}.");
   }

   static string MDYToDMY(string input)
   {
      try {
         return Regex.Replace(input,
                @"\b(?<month>\d{1,2})/(?<day>\d{1,2})/(?<year>\d{2,4})\b",
               "${day}-${month}-${year}", RegexOptions.None,
               TimeSpan.FromMilliseconds(150));
      }
      catch (RegexMatchTimeoutException) {
         return input;
      }
   }
}
// The example displays the following output to the console if run on 8/21/2007:
//      Converted 08/21/2007 to 21-08-2007.
Imports System.Globalization
Imports System.Text.RegularExpressions

Module DateFormatReplacement
    Public Sub Main()
        Dim dateString As String = Date.Today.ToString("d", _
                                             DateTimeFormatInfo.InvariantInfo)
        Dim resultString As String = MDYToDMY(dateString)
        Console.WriteLine("Converted {0} to {1}.", dateString, resultString)
    End Sub

    Function MDYToDMY(input As String) As String
        Try
            Return Regex.Replace(input, _
                   "\b(?<month>\d{1,2})/(?<day>\d{1,2})/(?<year>\d{2,4})\b", _
                   "${day}-${month}-${year}", RegexOptions.None,
                   TimeSpan.FromMilliseconds(150))
        Catch e As RegexMatchTimeoutException
            Return input
        End Try
    End Function
End Module
' The example displays the following output to the console if run on 8/21/2007:
'      Converted 08/21/2007 to 21-08-2007.

Comments

O padrão da expressão regular \b(?<month>\d{1,2})/(?<day>\d{1,2})/(?<year>\d{2,4})\b é interpretado conforme mostrado na tabela a seguir.

Pattern Description
\b Começar a correspondência em um limite de palavra.
(?<month>\d{1,2}) Corresponder a um ou dois dígitos decimais. Este é o grupo capturado do month.
/ Corresponde à barra.
(?<day>\d{1,2}) Corresponder a um ou dois dígitos decimais. Este é o grupo capturado do day.
/ Corresponde à barra.
(?<year>\d{2,4}) Corresponder de dois a quatro dígitos decimais. Este é o grupo capturado do year.
\b Termina a correspondência em um limite de palavra.

O padrão ${day}-${month}-${year} define a cadeia de caracteres de substituição, conforme mostrado na tabela a seguir.

Pattern Description
$(day) Adicione a cadeia de caracteres capturada pelo day grupo de captura.
- Adicione um hífen.
$(month) Adicione a cadeia de caracteres capturada pelo month grupo de captura.
- Adicione um hífen.
$(year) Adicione a cadeia de caracteres capturada pelo year grupo de captura.

Consulte também