Dificuldade com regex

1 resposta
R

Boa tarde!

Estou mexendo com 'robôs' para capturar informações em alguns sites e o caminho mais 'fácil' e limpo que vi até agora para tratar todo o HTML da página foi através de Regex.
Um colega de trabalho montou um para o primeiro site que eu fiz e ficou muito bom, problema que mudei o site agora e estou apanhando feio.

Ex:

Em uma página HTML a informação que aparece é:

Endereço: Av. Barão do Rio Branco 2001
Bairro: Centro
Cidade: Petrópolis

o html disso é:
<tr>

                      <td valign="top" nowrap="nowrap" class="info">Endere&ccedil;o:</td>

                      <td valign="top">
                        Av. Barão do Rio Branco
                        &nbsp;
                        2001
                        &nbsp;                

                        &nbsp;
                      </td>
                    </tr>              
               
                    <tr>
                      <td valign="top" nowrap="nowrap" class="info">Bairro:</td>
                      <td valign="top">
                        Centro
                      </td>
                    </tr>              
                  
                    <tr>
                      <td valign="top" nowrap="nowrap" class="info">Cidade:</td>
                      <td valign="top">
                        Petrópolis
                      </td>
                    </tr>
então, para buscar estas três informações, o colega usou o seguinte código: (scriptBuffer contem todo o HTML da página)
static Pattern endereco = Pattern.compile("Endere&ccedil;o:[^>]*>[^>]*>([^<]*)", Pattern.MULTILINE);
	static Pattern bairro = Pattern.compile("Bairro:[^>]*>[^>]*>([^<]*)",Pattern.MULTILINE);
	static Pattern cidade = Pattern.compile("Cidade:[^>]*>[^>]*>([^<]*)",Pattern.MULTILINE);


m = endereco.matcher(ScriptBuffer);
				if (m.find()) {
					System.out.println("Cidade: " + m.group(1));
				}

				m = bairro.matcher(ScriptBuffer);
				if (m.find()) {
					System.out.println("Cidade: " + m.group(1));					
				}

				m = cidade.matcher(ScriptBuffer);
				if (m.find()) {
					 System.out.println("Cidade: " + m.group(1));
				}

e a informação vem redondinha. Apenas o texto que preciso.

1ª pergunta, o que este código: " ("Bairro:[^>]*>[^>]*>([^<]*)" faz? O que estou dizendo que eu quero nisso?
dei uma lida aqui em toda documentação da classe regex, e está tudo bem confuso na minha mente ainda, ainda + pq o colega concatenou várias coisas nessa expressão ai.

Acontece que nesta nova página, o HTML vem com fechamento de aspas + cedo:

<td id="" width="150" valign="">
		  	    <div class="labelClass" style="text-align:right;font-weight:bold;;">Classe:</div>
		  </td>
		    <td valign="">
	<table cellpadding="0" cellspacing="0" border="0" width="">
		<tr>
			<td>

		<span id="">	

	<span id="">Procedimento Ordinário</span>

e não consigo pegar a informação, podem me ajudar nisso e na minha pergunta?

obrigado

1 Resposta

marciobarroso

Hum … trabalhar com expressões regulares não é uma tarefa muito fácil. Você precisa estudar bastante o formato das expressões (praticamente um novo paradoxo de programação) para que assim você consiga utilizá-las tirando o máximo de proveito.

Te aconselho a dar uma procurada na internet por material sobre expressões regulares e estudar a fundo.

Boa sorte

Criado 17 de dezembro de 2012
Ultima resposta 17 de dez. de 2012
Respostas 1
Participantes 2