Expressão Regular: ajuda!

3 respostas
Vini_Fernandes

Ola a todos, estou lendo um arquivo cujas linhas estao com o formato abaixo, sendo que os valores entre as aspas duplas sao separados por um caracter de tabulação:

//linha do arquivo
"vinicius"    "fernandes"   "estudante"    "brasileiro"

e preciso extrair as informações que estao no interior das aspas duplas. Estou tentando fazer isso utilizando expressões regulares, da seguinte maneira:

//essa String foi construida para simular o problema da leitura das linhas do arquivo
String linha = "\"vinicius\"\t\"fernandes\"\t\"brasileiro\"";
String[] x = linha.split("\"\t\"");

e a saida que tenho eh:

"vinicius
fernandes
estudante
brasileiro"

Observem que as aspas dos extremos permanecem! Esse eh o problema…rsrrs. Aceito sugestoes!!!

Valeu

3 Respostas

Andre_Fonseca

Oi

Tenta fazer isso

Pattern p = Pattern.compile("[\" \t]+"); String[] linha = p.split("\"vinicius\"\t\"fernandes\"\t\"brasileiro\""); for (int i=0; i<linha.length; i++) { System.out.println(linha[i]); }

Vini_Fernandes

Otimo…funcionou!!! Porem ainda me resta uma dúvida: qual é a leitura correta para a regex [" \t] que voce construiu?

Lavieri

Para pegar o resultado entre as aspas....

String fonte = "\"vinicius\"\t\"fernandes\"\t\"brasileiro\"";

        Pattern p = Pattern.compile("\"([^\"]*)\"");
        Matcher m = p.matcher(fonte);
        while (m.find()) {
            System.out.println(m.group(1));
        }

Acredito que assim fica melhor, pq vc vai pegando o resultado a medida que passa navega pela string, e só pega o resultado real, e com o splint acima, vc fica com o primeiro elemento em branco....

nesse meu regex, ele vai buscar o seguinte.... no inicio uma " .... no interior 0 ou mais caracters que não seja uma " ... e depois outra ".... e o m.group(1).... vai pegar os elementos que batem com o que esta entre parentese ([\"]*) que é os todos os caracters entre as aspas, que não são aspas ^^

As contrabarras tornam meio ilegivel o regex, mais ele ta escrito assim ==>> "([^"]*)" ... ou seja... o gropo entre parentese quer dizer, 0 ou mais caracters * que não sejam ^ uma aspa dupla [^"]

não sei c expliquei direito + ta ai

Criado 6 de junho de 2009
Ultima resposta 7 de jun. de 2009
Respostas 3
Participantes 3