Robson Alves O que torna um sonho irrealizável é a inércia de quem sonha

21abr/112

Encontre no Texto com Expressões Regulares

Vou mostrar aqui 4 exemplos simples que captura texto, grupo de texto e faz replace dentro de um trecho via Expressão Regular

As ER's transferem um poder gigantesco quando necessitamos desta tarefas e até mesmo na geração de mascarás para textbox.

 

O REGEX possui algumas opções e é muito importante entender a funcionalidade de cada um para utilizar o ER da melhor forma:

http://msdn.microsoft.com/en-us/library/yd1hzczs(v=VS.100).aspx

RegexOptions,png

 

Vamos a prática.


Buscando Texto
 String Fonte = "aonde Quer Vá, Aonde Quer Que Seja, Ande com as pés";
 private void buscaTexto()
        {

            // Instância do Regex e a palavra que vamos buscar na fonte.
            Regex regex = new Regex("Aonde");

            // Armazena a coleção de Expressões Casadas.
            MatchCollection coll = regex.Matches(Fonte);

            foreach (Match item in coll)
            {
                lblResults.Text += String.Format(" Encontrei a palavra {0} na posição {1} e Termina na Posição {2}",
					item.Value.Trim(), item.Index, item.Index + item.Value.Length);
            }
        }

Quantidade de Letras por palavras

String Fonte = "aonde Quer Vá, Aonde Quer Que Seja, Ande com as pés";
 private void buscaTextoQtdLetras()
        {
            //Busca por palavras que contenha apenas Letras Maiuscula e Minuscula
            // e tenham 3 ou mais caracteres.
            Regex regex = new Regex("[a-zA-Z]{5,}");
            // Armazena a coleção de Expressões Casadas.
            MatchCollection coll = regex.Matches(Fonte);

            foreach (Match item in coll)
            {
                lblResults.Text += String.Format(" Encontrei a palavra {0} na posição {1} e Termina na Posição {2} Que Possui {3} ou Mais", item.Value.Trim(), item.Index, item.Index + item.Value.Length, item.Value.Length);
            }
        }

Extraindo Grupo do Text

 private void ExtraindoPorGrupos()
        {
            String End = "1234 Cherry Lane, USA" + Environment.NewLine + "1234 Apple Tree Drive, Smalltown, USA " + Environment.NewLine + "3456 Chry Orchard streetm Smalltown, USA";

            //Busca da esquerda pra direita após os numeros o nome da rua, pegando os espaços \\s entre as letras e pegando todas,
            //ignorando a virgula e tudo que vem após a mesma.
            Regex regex = new Regex("^(?\\d+)\\s*(?[\\w\\s]*)", RegexOptions.Multiline);

            MatchCollection coll = regex.Matches(End);

            foreach (Match item in coll)
            {
                string Rua = item.Groups["Rua"].Value;
                String Numero = item.Groups["Numero"].Value;
                lblResults.Text += ""+ String.Format("Rua : {0} ", Rua);
                lblResults.Text += "" + String.Format("Número :{0} ", Numero);
            }
        }

Replace Com Regex

private void ReplaceTexto()
        {
            Regex regex = new Regex("^[aA]\\w+");

            lblResults.Text += "" + regex.Replace(Fonte, "Por Onde");
        }

Após rodar a aplicação o seguinte resultado é gerado:

OutPut

Muito legal, acredito que isto ajudará a ter noção do que da pra ser feito com Regex e Expressões Regulares, compensa sim dar uma estuda na sintaxe ER para .Net.

Obrigado.

30out/100

Expressões Regulares

Um dos estudos recentes que estou pondo em prática, acredito no poder da expressão regular e na sua importância, apesar de ter outras formas mais “Humanas” de se fazer a mesma coisa, é importante termos o conhecimento dessas expressões, como já aconteceu comigo, se deparar com JavaScript transbordando expressões regulares, então decidi por em prática o que venho lendo e aprendendo com a comunidade.

 

Vamos ao que interessa:

 

Eu criei um programa utilizando windows form que efetua a validação de Regex digitado, nada além do que existe na internet hoje. O fonte estará disponibilizado para download no final da página.

Fazer Expressão regular é uma arte que se deve ter uma grande atenção e abastração do que você precisa recolher em um texto.

 

Para buscamos em uma linha inteira utilizamos os (\b) que se atentam a buscar nas bordas da linha todo o contêudo entre elas.

 

Então sabendo disso vamos buscar em uma texto a existência de algumas palavras, segue a Expressão:

 

^.*\b(Robson|domingo|relatos)\b

Então você indica pra ele, pegue do inicio e do fim da linha e qualquer caracter, porém só vou casar com essa linha se nela exister Robson ou domingo ou relatos. Então ao digitar a linha com uma ou mais dessas palavras ele irá retornar para você

 

Segue uma lista dos metacaracteres e algumas referências no assunto:

        meta    Descrição
        ___________________________
        .       ponto
        []      lista
        [^]     lista negada
        ?       opcional
        *       asteristico (Coringa0
        +       mais
        {}      chaves
        ^       circunflexo (Começo da Linha) âncora
        $       cifrão (final da linha) âncora
        \b      borda (Bordas da linha) âncora
        \       escape (Escapar metacaracteres)
        |       ou
        ()      grupo
        \n      retrovisor

Este assunto envolve mais prática do que a teroria, apenas tente entender os por quês de cada metacaracter e pratiques.

 

Referências do Assunto:

http://www.linhadecodigo.com.br/artigo/2015/Express%C3%B5es-Regulares-Armamento-Pesado.aspx

http://www.piazinho.com.br/

 

Este é o livro do @oreio : http://www.memelo.org/tmp/docs/perl/guia-er.sourceforge.net/guia-er-1.html

 

Download do Fonte: http://tinyurl.com/24sj22c:

 

Comentem

.