Galera, tenho que fazer uma regex para o seguinte treixo de código:
[code]
11/03/1996 |
41 |
05 |
04 |
52 |
30 |
33 | [/code]
onde o mesmo repete varias vezes em um documento…
fiz a seguinte expressão:
<td>\\d{2}/\\d{2}/\\d{4}</td>\\n*<td>\\d{2}</td>\\n*<td>\\d{2}</td>\\n*<td>\\d{2}</td>\\n*<td>\\d{2}</td>\\n*<td>\\d{2}</td>\\n*<td>\\d{2}</td>
Porem não funciona, alguem tem alguma ideia do que seja ?
Obs: o código está correto pois testei outras expressões e deu certo.
oq vc quer pegar?
todos os tds? tds vazios? oq?
[]'s
Uma pergunta, você quer uma expressão regular para o conjunto ou para todos os itens individualmente??
se a resposta foi sim para segunda pergunta
tai
(<td>)([0-9]{2})([/][0-9]{2}[/][0-9]{4})*(</td>)
Vê se te ajuda
by the way, vale a pena testar regex em algum testador online tipo
http://regexpal.com/
abraços
Todos os valores, porem separados…
fsuzuki, deu certio a expressão… porem ele pega qlqr tag
com 2 números dentro,
eu precisava que fossem na seguida que eu passei…
|
paulohms
há duas saida possíveis.
Verificar se o item anterior está no padrão da tag que você quer, ou outra expressão regular.
eu poderia de dar a outra expressão regular pronta, porém você não ia evoluir como desenvolvedor certo 
portanto vale a pena dar uma estudada em regex.
http://www.guj.com.br/java/103520-regex—expressao-regular-em-java
e como eu disse no post anterior, vale a pena colocar um exemplo do documento e ir fazendo sua regex
no http://regexpal.com/
fsuzuki,
Os padrões estão corretos, atualmente trabalho com expressões regulares, porem faço as mesmas em shell script e em perl no qual já fiz o mesmo nas duas linguagens e está tudo certo, só em java que não funciona,…
pelos testes realizados percebi que é pelos espaços…
Se tu sabe alguma solução por favor poste ai para me ajudar…
Vlw !
Obs: no regextester a expressão funciona blzinha.
Só tô postando aqui esse resultado porque pensamos juntos nesse problema e chegamos a varias formas de solucionar, mas esta aqui estou usando duas regex para garantir integridade da informação com base na parte concreta que é a data do sorteio seguido de 6
. Fazendo a Leitura de Byte pra um StringBuilder como haviamos comentado para não ficar instanciando toda a vida uma nova String. Bom Acho que ficou legal, qualquer duvida de alguem que ficou interessado tamos aê. Ah dados.txt esta o codigo fonte com resulatdos da mega sena sem tratamento. saida.txt é o file onde está a informação tratada. Valew Paulo, foi legal!
package br.com.barbini;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.Writer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Aplicacao {
public static void main(String[] args) throws IOException {
InputStream is = new FileInputStream("dados.txt");
Writer w = new FileWriter("saida.txt");
byte[] buffer = new byte[1024];
int bytesLidos;
StringBuilder s = new StringBuilder();
while ((bytesLidos = is.read(buffer)) > -1) {
s.append(new String(buffer, 0, bytesLidos));
}
Pattern p1 = Pattern
.compile("<td>\\d{2}/\\d{2}/\\d{4}</td>\\s*((?:<td>\\d{2}</td>\\s*){6})");
Pattern p2 = Pattern.compile("<td>(\\d{2})</td>");
Matcher m1 = p1.matcher(s);
while (m1.find()) {
Matcher m2 = p2.matcher(m1.group(1));
int x = 0;
while (m2.find()) {
w.write(m2.group(1) + " ");
x++;
if (x % 6 == 0)
w.write("\n");
}
}
w.close();
}
}
|