Resumo : neste tutorial, você aprenderá como usar a Regex
classe C# para trabalhar com expressões regulares.
Introdução à classe C# Regex
O programa simples a seguir usa o Contains()
método de um String
objeto 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:
True
Linguagem 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 result
sinalizador como false
e 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 result
to true
e interrompe o loop. Finalmente, o programa grava result
no 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:
\d
Linguagem de código: C# ( cs )
Para usar esse padrão de expressão regular em C# para correspondência, você precisará utilizar a Regex
classe.
Primeiro, importe o System.Text.RegularExpressions
namespace no programa:
using System.Text.RegularExpressions;
Linguagem de código: C# ( cs )
Segundo, crie um novo Regex
objeto e passe o padrão de expressão regular para o Regex
construtor do:
var regex = new Regex(@"\d");
Linguagem de código: C# ( cs )
Segundo, chame o IsMatch()
método que retorna true
se 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:
True
Linguagem 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 Regex
objeto e chamar o IsMatch()
método, você pode usar o IsMatch()
método estático da Regex
classe. 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:
True
Linguagem 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 Regex
objeto oferece melhor desempenho.
A razão é que quando você chama o IsMatch()
método de um Regex
objeto, ele compila o padrão em uma representação interna que otimiza o padrão para correspondência. Depois de compilado, o Regex
objeto 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 Regex
classe 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 Match
objeto.
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:
3
Linguagem 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
5
Linguagem 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()
eMatches()
doRegex
objeto se você corresponder um único padrão várias vezes para obter maior desempenho. Caso contrário, usa os métodos estáticos correspondentes daRegex
classe para tornar o código mais conciso.