Aos gurus das RegExp e "idiotas"

15 views
Skip to first unread message

Cristovão Morgado

unread,
May 14, 2013, 12:28:43 PM5/14/13
to netp...@googlegroups.com
É o seguinte..

tenho uns conteúdos como este por exemplo:

"[title|Canon EOS 60D] [summary]A 17.9 Megapixel DSLR released in 2010. Model number DS126281[/summary] [summary_image|241668] [http://en.wikipedia.org/wiki/Canon_EOS_60D|Wikipedia Canon EOS 60D]"

E Gostaria de transformar isto num dicionário ou uma estrutura chave : valor... 
Ora fazer parsing the strings parece-me francamente .... vá .... mau trabalho...

Alguém tem uma sugestão

Gracias

Cris
"Always learning there's even more to learn"


--
Cristovao Morgado
@TheSaintr

Pedro Lamas

unread,
May 14, 2013, 1:04:50 PM5/14/13
to netp...@googlegroups.com

Um bocado a correr, mas deve pelo menos funcionar bem para o teu exemplo...

static void Main(string[] args)
{
    var re = @"\[(?<key>[^|\]]*)\](?<value>.*?)\[/.*?\]|\[(?<key>.*?)\|(?<value>.*?)\]";
    var t = @"[title|Canon EOS 60D] [summary]A 17.9 Megapixel DSLR released in 2010. Model number DS126281[/summary] [summary_image|241668] [http://en.wikipedia.org/wiki/Canon_EOS_60D|Wikipedia Canon EOS 60D]";

    var dic = System.Text.RegularExpressions.Regex.Matches(t, re)
        .Cast<System.Text.RegularExpressions.Match>()
        .ToDictionary(x => x.Groups["key"].Value, x => x.Groups["value"].Value);

    if (dic != null)
    {
        dic = null;
    }
}


------------------------------------------------------------
Pedro Lamas


2013/5/14 Cristovão Morgado <cristova...@gmail.com>

--
--
Você recebeu esta mensagem por fazer parte da lista de discussão oficial da Comunidade NetPonto (http://netponto.org).
 
---
Recebeu esta mensagem porque está inscrito no grupo "NetPonto.org - Lista de Discussao Oficial" dos Grupos do Google.
 
Para anular a subscrição deste grupo e parar de receber emails deste grupo, envie um email para netponto+u...@googlegroups.com.
Para mais opções, consulte https://groups.google.com/groups/opt_out.
 
 

Caio Proiete

unread,
May 14, 2013, 1:30:17 PM5/14/13
to NetPonto Google Groups
Penso que o Pedro Lamas já deu-te a resposta que querias (RegEx), mas o problema está mesmo em quem decidiu reinventar a roda e entregar a informação dessa forma...

Que tal alterar o processo que gera essa informação usar um formato "normal" como XML ou JSON???


2013/5/14 Cristovão Morgado <cristova...@gmail.com>

Flávio Oliveira

unread,
May 14, 2013, 1:31:28 PM5/14/13
to netp...@googlegroups.com
boas cristovão,

Atendendo à possibilidade de o formato do conteúdo poder variar como mostras no exemplo, aquilo que eu faria era contruir uma lista de expressões regex que contem sempre o par (?<key>) e (?<value>), uma para cada Par chave valor, que esperas encontrar ou seja, uma regex para o title, e outra para o summary.

depois disso é só correr as Regex e extrair os valores encontrados.



Com os melhores cumprimentos,
Flávio Oliveira

Confidencialidade: Toda a informação contida neste e-mail é confidencial e privilegiada, destinando-se unicamente à(s) pessoa(s) ou entidade(s) acima referidas. Se o leitor desta mensagem não for o seu destinatário, fica pela presente notificado de que qualquer divulgação, distribuição ou reprodução  do respectivo conteúdo é expressa e estritamente proibida.

Bruno Lopes

unread,
May 14, 2013, 1:33:18 PM5/14/13
to netp...@googlegroups.com
Cheira-me que o Cristovão não teve voto na materia e/ou isto é screenscraping :P


2013/5/14 Caio Proiete <ca...@netponto.org>

Pedro Lamas

unread,
May 14, 2013, 1:46:16 PM5/14/13
to netp...@googlegroups.com
Cheira-me que te cheira correctamente! :D

------------------------------------------------------------
Pedro Lamas


2013/5/14 Bruno Lopes <bruno...@netponto.org>

Flávio Oliveira

unread,
May 14, 2013, 1:35:28 PM5/14/13
to netp...@googlegroups.com
Mas o essencial está na mensagem do mail do Pedro Lamas

Com os melhores cumprimentos,
Flávio Oliveira

Confidencialidade: Toda a informação contida neste e-mail é confidencial e privilegiada, destinando-se unicamente à(s) pessoa(s) ou entidade(s) acima referidas. Se o leitor desta mensagem não for o seu destinatário, fica pela presente notificado de que qualquer divulgação, distribuição ou reprodução  do respectivo conteúdo é expressa e estritamente proibida.


Cristovão Morgado

unread,
May 14, 2013, 2:31:09 PM5/14/13
to netp...@googlegroups.com
por acaso se fosse scraping tava resolvido om o html agility :)


2013/5/14 Pedro Lamas <pedro...@gmail.com>



--
Cristovao Morgado
@TheSaintr

Cristovão Morgado

unread,
May 14, 2013, 2:23:39 PM5/14/13
to netp...@googlegroups.com
Não tive ... pois faz parte mesmo do serviço ...podem ver aqui um exemplo... https://www.ifixit.com/api/1.1/categories/Camera

Como é uma API aberta ao público não há stress em divulgar...

É que estou a fazer-lhes as apps oficiais visto as minhas não oficiais terem tido sucesso :)

Aqui está um factor de motivação para quem procura motivar-se....
Ou faz um MEGA componente como o FABULOSO Cimbalino .. ou faz uma App a partir de uma API aberta.... e quem sabe ;)




2013/5/14 Bruno Lopes <bruno...@netponto.org>



--
Cristovao Morgado
@TheSaintr

Cristovão Morgado

unread,
May 14, 2013, 2:21:00 PM5/14/13
to netp...@googlegroups.com
Pois muita razão tens Caio... e serviços REST/JSON que num valor trazem HTML .. é mato!

A sugestão foi dada e para a API 1.2 eles vão mudar até porque querem deixar-se de malabarismos no iOS e Android tb...


2013/5/14 Caio Proiete <ca...@netponto.org>



--
Cristovao Morgado
@TheSaintr

Cristovão Morgado

unread,
May 14, 2013, 2:19:45 PM5/14/13
to netp...@googlegroups.com
OBRIGADO! é que eu regexp vejo bola!


2013/5/14 Pedro Lamas <pedro...@gmail.com>



--
Cristovao Morgado
@TheSaintr

Sérgio Agostinho

unread,
May 14, 2013, 5:57:37 PM5/14/13
to netp...@googlegroups.com
Vê lá se isto ajuda: http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx Pelo menos podes ir construindo a expressão regular aos bocados :)
Sérgio Agostinho

Cristovão Morgado

unread,
May 14, 2013, 6:19:43 PM5/14/13
to netp...@googlegroups.com
Obg Sérgio 
--
Sérgio Agostinho

--
--
Você recebeu esta mensagem por fazer parte da lista de discussão oficial da Comunidade NetPonto (http://netponto.org).
 
---
Recebeu esta mensagem porque está inscrito no grupo "NetPonto.org - Lista de Discussao Oficial" dos Grupos do Google.
 
Para anular a subscrição deste grupo e parar de receber emails deste grupo, envie um email para netponto+u...@googlegroups.com.
Para mais opções, consulte https://groups.google.com/groups/opt_out.
 
 


--
Cristovao Morgado
@TheSaintr


Reply all
Reply to author
Forward
0 new messages