Expresión regular en Java

dagavi

Buenas, estaba intentando hacer un programilla para uso propio y me encuentro de frente con el problema de tener poca experiencia con expresiones regulares.

En mi programa descargo el código HTML de una web para, posteriormente, parsearlo y obtener los pocos datos que me interesan.

Un ejemplo del código HTML de la web puede ser este:

http://pastebin.com/MBxP3phQ

Lo único que me interesa sería algun campo de la tabla, por lo que lo que estaba intentando hacer era: obtengo todas las filas (por separado) a partir del elemento tr

Una vez tuviera cada fila la podría tratar individualmente de forma similar sacando otros datos.

Sin embargo no consigo que el Pattern + Matcher de Java me devuelva diversos grupos de: <tr>cosa</tr>

De forma simplificada, no soy capaz de sacar del siguiente string:
<tr>1</tr><tr>2</tr><tr>3</tr>

Algo que esperaba que funcionara con code*[/code], al menos que me retornara, de forma separada, los elementos <tr>X</tr>, pero nada.

¿Alguna ayuda con las expresiones regulares y su tratamiento en Java?

LOc0

No he usado mucho las regex en Java, pero yo probaría con:

Pattern pattern = Pattern.compile("<tr>(.*?)</tr>");

Matcher matcher = pattern.matcher(HTML);

//Procesas todas las filas
while(matcher.find())
{

String fila=matcher.group(1); //Sin los tags <tr></tr>

Pattern pattern2 = Pattern2.compile("<td>(.*?)</td>");

Matcher matcher2 = pattern2.matcher(fila);

//Procesas todas las columnas
while(matcher2.find())
{
   String columna=matcher2.group(1); //Sin los tags <td></td>
}

}

Salu2 ;)

1
dagavi

Perfecto! No sabia / recordaba que se tenía que utilitzar el matcher.find()

Yo metía una expresión regular que intentara representar todo el documento del plan:

.*(<tr>(.+)</tr>)*.*

Ya que solo usar <tr> (. + )</tr> no me hacía match y no sabía como decirle "busca ese patrón", pero ahora ya tira, ya lo tengo todo separado :D

Muchas gracias.

Usuarios habituales

  • dagavi
  • LOc0