Regex em C#

Resumo : neste tutorial, você aprenderá como usar a Regexclasse C# para trabalhar com expressões regulares.

Introdução à classe C# Regex

O programa simples a seguir usa o Contains()método de um Stringobjeto para verificar se uma string de entrada contém o número 2:

using static System.Console;


var message = "I have 2 apples";
var result = message.Contains("2");

WriteLine(result);Linguagem de código:  C#  ( cs )

Saída:

TrueLinguagem de código:  C#  ( cs )

Se o número que você deseja verificar não for 2, mas puder variar de 0 a 9, será necessário modificar o programa assim:

var message = "I have 5 apples";

var result = false;
for (var i = 0; i <= 9; i++)
{
    if (message.Contains(i.ToString()))
    {  
        result = true;
        break;
    }
}

WriteLine(result);Linguagem de código:  C#  ( cs )

O programa define o resultsinalizador como falsee verifica se uma string de entrada contém um único dígito de 0 a 9 usando um loop for. Se isso acontecer, o programa define resultto truee interrompe o loop. Finalmente, o programa grava resultno console.

O programa funciona conforme o esperado, mas é bastante detalhado. Para verificar se uma string contém um único dígito, você pode usar uma expressão regular.

Uma expressão regular descreve um padrão de correspondência. Por exemplo, para corresponder a um único dígito, use o seguinte padrão:

\dLinguagem de código:  C#  ( cs )

Para usar esse padrão de expressão regular em C# para correspondência, você precisará utilizar a Regexclasse.

Primeiro, importe o System.Text.RegularExpressionsnamespace no programa:

using System.Text.RegularExpressions;Linguagem de código:  C#  ( cs )

Segundo, crie um novo Regexobjeto e passe o padrão de expressão regular para o Regexconstrutor do:

var regex = new Regex(@"\d");Linguagem de código:  C#  ( cs )

Segundo, chame o IsMatch()método que retorna truese uma string de entrada corresponder ao padrão de expressão regular:

var result = regex.IsMatch(message);Linguagem de código:  C#  ( cs )

Se a mensagem da string de entrada não corresponder ao padrão, o IsMatch()método retornará false.

Junte tudo:

using System.Text.RegularExpressions;
using static System.Console;


var message = "I have 5 apples";
var regex = new Regex(@"\d");

var result = regex.IsMatch(message);

WriteLine(result);Linguagem de código:  C#  ( cs )

Saída:

TrueLinguagem de código:  C#  ( cs )

Neste exemplo, ao usar expressões regulares para correspondência, o programa se torna menos detalhado.

Usando o método estático C# Regex.IsMatch()

Além de criar um novo Regexobjeto e chamar o IsMatch()método, você pode usar o IsMatch()método estático da Regexclasse. Por exemplo:

using System.Text.RegularExpressions;
using static System.Console;


var message = "I have 5 apples";
var pattern = @"\d";

var result = Regex.IsMatch(message, pattern);

WriteLine(result);Linguagem de código:  C#  ( cs )

Saída:

TrueLinguagem de código:  C#  ( cs )

O IsMatch()método estático aceita dois argumentos, o primeiro é uma string de entrada e o segundo é um padrão para correspondência.

Se você tiver uma tarefa de correspondência única, o IsMatch()método estático será mais conciso e conveniente. Porém, quando você precisa reutilizar o mesmo padrão para múltiplas correspondências, usar o IsMatch()método de um Regexobjeto oferece melhor desempenho.

A razão é que quando você chama o IsMatch()método de um Regexobjeto, ele compila o padrão em uma representação interna que otimiza o padrão para correspondência. Depois de compilado, o Regexobjeto armazena o resultado em cache internamente para que a próxima correspondência não precise recompilar o padrão novamente, resultando em uma correspondência mais rápida.

Por outro lado, o IsMatch()método estático não oferece as mesmas otimizações. Em vez disso, ele compila internamente o padrão de expressão regular para cada operação correspondente. Isso causa sobrecarga extra e diminui o desempenho se você usar o mesmo padrão para correspondência diversas vezes.

Observe que esta lógica também se aplica a outros métodos e métodos estáticos da Regexclasse como Match()e Matches().

Método C# Regex Match

O Match()método corresponde a um padrão e retorna a primeira correspondência como um único Matchobjeto.

Por exemplo, o programa a seguir usa o Match()método para gerar o primeiro número encontrado em uma string:

using System.Text.RegularExpressions;
using static System.Console;


var message = "I have 3 apples and 5 oranges";
var pattern = @"\d";

var match = Regex.Match(message, pattern);
WriteLine(match);Linguagem de código:  C#  ( cs )

Saída:

3Linguagem de código:  C#  ( cs )

Método C# Regex Matches

Ao contrário do Match()método, o Matches()método retorna uma coleção de correspondências encontradas em uma string. Por exemplo:

using System.Text.RegularExpressions;
using static System.Console;


var message = "I have 3 apples and 5 oranges";
var pattern = @"\d";

var matches = Regex.Matches(message, pattern);

foreach (var match in matches)
{
    Console.WriteLine(match);
}Linguagem de código:  C#  ( cs )

Saída:

3
5Linguagem de código:  C#  ( cs )

Neste tutorial, você aprendeu um padrão simples que corresponde a um único dígito. Nos próximos tutoriais, você aprenderá como construir padrões mais flexíveis.

Resumo

  • Use Regex.IsMatch()o método para verificar se um padrão de expressão regular encontra uma correspondência em uma string.
  • Use Regex.Match()o método para retornar a primeira correspondência de um padrão de expressão regular em uma string.
  • Use Regex.Matches()o método para retornar todas as correspondências de um padrão de expressão regular em uma string.
  • Use métodos como IsMatch(), Match()e Matches()do Regexobjeto se você corresponder um único padrão várias vezes para obter maior desempenho. Caso contrário, usa os métodos estáticos correspondentes da Regexclasse para tornar o código mais conciso.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *