Hoje vamos rever alguns conceitos sobre expressões regulares usando dois exemplos práticos. |
Eu já escrevi diversos artigos sobre o recurso as expressões regulares. Para saber mais leia os artigos:
Neste artigo vou mostrar uma aplicação prática usando expressões regulares.
Para o exemplo deste artigo eu vou criar uma aplicação Console Application, mas fique a vontade para aplicar o código a outros tipos de projetos.
Recursos usados:
Criando a solução no VS 2017
Abra o VS 2017 e no menu File clique em New Project;
Selecione a linguagem C# e o template Console App (.NET Framework) e informe o nome Cshp_Regex1;
Vamos incluir uma classe no projeto criado onde vamos definir o código que vai usar a expressão regular.
No menu Project clique em Add Class e informe o nome PalavraRegex;
A seguir inclua o código abaixo nesta classe:
using System;
using System.IO;
using System.Text.RegularExpressions;
namespace Cshp_Regex1
{
public class PalavraRegex
{
private static Regex _Regex;
public PalavraRegex(string palavra)
{
_Regex = new Regex(@"\b" + palavra + "\\b");
}
public void Procurar(string arquivo)
{
String linha;
int numeroLinha = 0;
using (StreamReader sr = new StreamReader(arquivo))
{
while (null != (linha = sr.ReadLine()))
{
numeroLinha++;
if (_Regex.IsMatch(linha))
{
Console.WriteLine("Ocorrência da palavra: {0}' na linha {1}", linha, numeroLinha);
}
}
}
}
}
}
|
Este código define uma expressão regular do tipo \bpalavra\b no construtor da classe :
public PalavraRegex(string palavra)
{
_Regex = new
Regex(@"\b" + palavra + "\\b");
}
Uma
classe de caractere especial, \b, permite que você procure facilmente por
palavras inteiras.
A expressão esta sendo montada assim:
\b -> um limite de palavra (um espaço, início de uma linha ou pontuação).
. .
palavra
\b -> um limite de palavra no final da palavra.
O método Procurar() abre o arquivo informado onde a busca pelas ocorrências da palavra serã realizadas e usa o método IsMatch que Indica se a expressão regular localiza uma correspondência na cadeia de caracteres de entrada.
Você pode consumir esta classe de diversas formas. No exemplo vamos definir no arquivo Program.cs o código abaixo:
using System;
namespace Cshp_Regex1
{
class Program
{
static void Main(string[] args)
{
while (true)
{
Console.WriteLine("Informe o nome do arquivo. (Para sair tecle -> X )");
string arquivo = Console.ReadLine();
if (arquivo == "X")
{
break;
}
Console.WriteLine("Informe a palavra a procurar. (Para sair tecle -> X ");
string palavra = Console.ReadLine();
if (palavra == "X")
{
break;
}
PalavraRegex r = new PalavraRegex(palavra);
r.Procurar(arquivo);
}
}
}
}
|
Optei por criar um programa Console onde o usuário vai informar o local e nome do arquivo no qual deseja pesquisar a palavra e a seguir qual palavra vai pesquisar.
O programa irá exibir as ocorrências indicando o número da linha no arquivo.
No exemplo de execução abaixo foram informados :
1- arquivo : c:\dados\txt\FernandoPessoa2.txt
2- palavra : nada
Nota : A versão VB .NET para classe PalavraRegex é dada abaixo:
Imports System.IO
Imports System.Text.RegularExpressions
Public Class PalavraRegex
Private Shared _Regex As Regex
Sub New(palavra As String)
_Regex = New Regex("\b" & palavra & "\b")
End Sub
Public Sub Procurar(ByVal arquivo As String)
Dim linha As String
Dim numeroLinha As Integer = 0
Dim sr As StreamReader = File.OpenText(arquivo)
linha = sr.ReadLine
While Not linha Is Nothing
numeroLinha = numeroLinha + 1
If _Regex.IsMatch(linha) Then
Console.WriteLine("Ocorrências : '{0}' na linha {1}",
linha,
numeroLinha)
End If
linha = sr.ReadLine
End While
sr.Close()
End Sub
End Class
|
Pegue o projeto completo aqui : Cshp_Regex1.zip
"Se alguém me serve,
siga-me, e onde eu estiver, ali estará também o meu servo. E, se alguém me
servir, meu Pai o honrará. "
João 12:26
Referências: