Duvida Expressao Regular

5 respostas
S

Galera estou com uma duvida tenho que pegar a primeira e a quarta coluna desta linha, gostaria de saber se alguem pode me ajudar a montar uma expressão regular para pega-la.

tentei de diversas formas mas se eu utilizar .*; ele vai selecionar tudo e não sei como tratar isso.

Linha:
BIG - SÃO LEOPOLDO (38);LANCHE SAL 20% LIPÍDIOS - 250g;0,54;GRANDE PORTO ALEGRE 10 + ST (25 lojas);Porto Alegre;;;;;;

Resultado:

BIG - SÃO LEOPOLDO (38);

GRANDE PORTO ALEGRE 10 + ST (25 lojas);

Obrigado!

5 Respostas

sr.saude

Oi, Shakall

Você pode tentar usar o operador .*?, que pega o mínimo de caracteres necessários para satisfazer a expressão. Então, se você aplicar a expressão

(.*?);.*?;.*?;(.*?);

ele deve pegar só a primeira e a quarta coluna.

Outra solução é utilizar o operador [^;]*, que pega tudo que não for ponto-e-vírgula:

([^;]*);[^;]*;[^;]*;([^;]*);
adriano_si

Outra opção é usar o Split…

ele vai dividir a String cheia pra ti e jogar em um Array de Strings…

Aí basta pegar o resultado 0 e 3 desse Array…

Vai ficar mais amarrado… mas…

Teste:

String s = "ESSA;STRING;AQUI;AGORA;;;;";
String res[] = s.split(";");
System.out.println(res[0] + " " + res[3]);

Não sei se funciona, não testei… mas a idéia é essa…

Abs []

S

Valeu pela ajuda, no meu caso eu preciso que seja EL, split neste caso de exemplo resolve, mas vou precisar para uma busca mais complexa em outro projeto, como não manjo de EL ainda bem que vcs me ajudaram.

Obrigado mais uma vez!

S

Pessoal uma nova duvida sobre ER, dado as linhas abaixo e a expressao gostaria de saber como resolver pois todas as linhas estão retornando como verdadeiras, e gostaria que a primeira linhas seja retornado false, pois onde deveria conter um numero decimal ou inteiro temos letras.

Obrigado!

ER:
^(.?);(.?);([0-9](,|.)[0-9]|[0-9]);(.?);(.*?);

Linhas:

Loja;Produto;preco;Região;Cidade;;;;;;

Loja;Produto;0.89;Região;Cidade;;;;;;

Loja;Produto;0,90;Região;Cidade;;;;;;

Loja;Produto;900;Região;Cidade;;;;;;
drigo.angelo

Tenta essa regex aqui:
([^;];){2}(([\d][,|.][\d])|[\d]);([^;]*;){2}

Essa primeira linha aí ele passou só
Loja;Produto;;;;;
xD

Já é uma base aí pro que você quer

Update: Desabilitando emoticons :stuck_out_tongue:

Criado 9 de março de 2011
Ultima resposta 14 de mar. de 2011
Respostas 5
Participantes 4