none
Pesquisar com regex e formar uma nova string com outro regex, ou expressão utilizando maths... ou qualquer outro meio... RRS feed

  • Pergunta

  • Olá pessoal, bom dia.

    Tenho q importar uma planilha do excel num datagrid e fazer uma busca com regex por todo o conteúdo.

    Já cnsegui carrega a planilha no datagridview e pesquisar, inserindo uma expressão regular numa caixa de texto.

    O desafio agora é substituir valores, quando o regex encontra uma ocorrencia, para um formato pré-estabelecido em outra caixa de texto. Por exemplo:

    Suonhamos q um dos valores da celula do grid seja  título de um livro "Orientação a Objetos, A".

    O regex deverá encontrar e substituir por "A Orientação a Objetos"...

    O problema é q o usuário deve ser capaz de formar essa palavra, ou seja, ele pode colocar esse "A" em qualquer lugar de "Orientação a Objetos"... ex.:  "A Orientação a Objetos" "Oirentação a Objetos A"

    Dand uma olhada na casse regex, li sobre Maths, mas não sei como implementar com isso. A idéia q eu tive inicialmente foi arrumar uma forma de gerar variáveis e depois, num campo qualquer, formar a string.

    Por exemplo, quando ele achasse o "A" essa seria  a variavel_1 e todo o resto do texto seria a variável_2, aí, num campod e texto eu etaria um template assim "variavel_1 variavel_2" e isso substituiria todas as frases do tipo "Orientação a objetos, A" por "A Orientação a Objetos", "e o é de feijão, João" por "João e o é de feijão", "minha visinha é uma chata, A" por "A minha visinha é uma chata".... e por aí vai

    Resumindo, inserir uma regex e pesquisar cada celula do grid, se achar pegar o valor dessa celula e formatar de acordo com outra expressão....

    Alguém pode me dar uma luz de como posso fazer isso? 


    Se a resposta foi útil, por favor marque como útil. Leia a bíblia.

    terça-feira, 2 de julho de 2013 14:44

Respostas

  • Cara, 

    Veja se te ajuda esse exemplo, fiz quando eu estava treinando um pouco de Regex e é sobre cpf e eu quebro por partes para juntar no final.. 

    Abraços.. 

        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine(formata("66617133830"));
                Console.ReadLine();
            }
    
            static string formata(string texto)
            {
                string pattern = @"(?<p1>\d{3})(?<p2>\d{3})(?<p3>\d{3})(?<p4>\d{2})";
    
                Regex ER = new Regex(@"(?<p1>\d{3})(?<p2>\d{3})(?<p3>\d{3})(?<p4>\d{2})", RegexOptions.None);
                Match mat = ER.Match(texto);
                
                return string.Format("{0}.{1}.{2}-{3}", mat.Groups["p1"].Value, mat.Groups["p2"].Value, mat.Groups["p3"].Value, mat.Groups["p4"].Value);
    
    
    
            }
        }


    Marcio S Silva | http://marsosi.blogspot.com | marsosil@ovi.com

    • Sugerido como Resposta Márcio S Silva quinta-feira, 4 de julho de 2013 12:05
    • Marcado como Resposta Tianodraco quarta-feira, 10 de julho de 2013 18:58
    quinta-feira, 4 de julho de 2013 12:05

Todas as Respostas

  • Pessoal, dando uma olhada neste tutorial descobri que a classe regex permite nomear seus Mathes em suas consultas.

    Assim sendo, acho q poderei usar isto pra construir uma nova frase. Ficaria mais ou menos assim:

    String original: "de Monte Cristo, O"

    Regex: (?<V1>...) -> onde V1 representa o " O" que será enxergado com qualquer regex em "..."

    Crio tb uma variável chamada <F> que representará toda a frase que não pertence ao valor retornado pela regex, q no caso é "de Monte Cristo,".

    Depois vem um campo chamado "Nova Forma" (uma caixa de texto).

    Nessa caixa de texto eu coloco algo como: "<F> <V1>"

    A saída disso será: " O Conde de Monte Cristo,"

    O espaço do início e a vírgula do final eu poderei retirar com novas regex...

    A dificuldade está em como pegar o valor da caixa de texto "<F> <V1>" e fazer o programa formar essa nova frase?



    Se a resposta foi útil, por favor marque como útil. Leia a bíblia.

    terça-feira, 2 de julho de 2013 20:01
  • Cara, 

    Veja se te ajuda esse exemplo, fiz quando eu estava treinando um pouco de Regex e é sobre cpf e eu quebro por partes para juntar no final.. 

    Abraços.. 

        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine(formata("66617133830"));
                Console.ReadLine();
            }
    
            static string formata(string texto)
            {
                string pattern = @"(?<p1>\d{3})(?<p2>\d{3})(?<p3>\d{3})(?<p4>\d{2})";
    
                Regex ER = new Regex(@"(?<p1>\d{3})(?<p2>\d{3})(?<p3>\d{3})(?<p4>\d{2})", RegexOptions.None);
                Match mat = ER.Match(texto);
                
                return string.Format("{0}.{1}.{2}-{3}", mat.Groups["p1"].Value, mat.Groups["p2"].Value, mat.Groups["p3"].Value, mat.Groups["p4"].Value);
    
    
    
            }
        }


    Marcio S Silva | http://marsosi.blogspot.com | marsosil@ovi.com

    • Sugerido como Resposta Márcio S Silva quinta-feira, 4 de julho de 2013 12:05
    • Marcado como Resposta Tianodraco quarta-feira, 10 de julho de 2013 18:58
    quinta-feira, 4 de julho de 2013 12:05