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
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:
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.
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
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
.