Ola a todos.
Poxa tentei de varias formas e não consegui isolar o pedaço que quero, se alguem puder dar uma luz:
O texto a ser analisado é este :
34;False;1;1;"NT EMF 1.008";True;True;"COMO, CONFIG;;RAR.txt - Bloco de notas";"Generic / Text Only";False;172;False;"\\FABIANO-151AC4E"
e preciso isolar esta parte para dar replace nos “;” fora do lugar:
"COMO, CONFIG;;RAR.txt - Bloco de notas"
estou fazendo assim:
Pattern caract = Pattern.compile(";\"w*(;+)w*(-)w*\";");
Matcher m = caract.matcher(linha);
while (m.find()) {
linha = linha.replaceAll(m.group(), m.group().replaceAll(";", ""));
System.out.println("group "+m.group().toString());
System.out.println("linha "+linha);
}
Se alguem puder me ajudar, agradeço desde já.
Bom dia,
tenta assim acho que vai te ajudar
para teste em minha maquina tive que escapar as aspas e o \ que vem antes do fabiano
String texto = "34;False;1;1;\"NT EMF 1.008\";True;True;\"COMO, CONFIG;;RAR.txt - Bloco de notas\";\"Generic / Text Only\";False;172;False;\"\\\\FABIANO-151AC4E\" ";
Pattern pattern = Pattern.compile("(\".+?\")");
Matcher matcher = pattern.matcher(texto);
while(matcher.find()){
texto = texto.replaceAll(matcher.group(), matcher.group().replaceAll(";", ""));
System.out.println("group "+matcher.group().toString());
System.out.println("linha "+texto);
}
se vc estiver lendo de um arquivo, fazer escape de caracteres não vai ser necessario.
espero ter ajudado
desculpa a ignorância… não entendo muito de expressões regulares… mas com esse pattern
Pattern pattern = Pattern.compile("(\".+?\")");
você não ta pegando todos os caracteres ao invés da parte isolada que ele quer?
sim, todos os caracteres que estiver entre aspas
o que ele que é dentro da string passada pegar o conteudo que esta entre aspas e substituir os “;” por vazio
entendi… achei que ele queria só naquele trecho que ele especificou
Bom pessoal acabei de chegar de um cliente e vou testar e posto pra voces se der ou errado.
abraços.
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TesteRegex {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(new File("teste.txt")));
String linha;
while ((linha = br.readLine()) != null) {
String regex = "\".*?\"";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(linha);
while (m.find())
System.out.println(m.group() + " Posicao: " + m.start() + "-" + m.end());
}
}
}
Arquivo teste.txt:
34;False;1;1;"NT EMF 1.008";True;True;"COMO, CONFIG;;RAR.txt - Bloco de notas";"Generic / Text Only";False;172;False;"\\FABIANO-151AC4E"
Saída:
“NT EMF 1.008” Posicao: 13-27
“COMO, CONFIG;;RAR.txt - Bloco de notas” Posicao: 38-78
“Generic / Text Only” Posicao: 79-100
“\FABIANO-151AC4E” Posicao: 117-136
Não está muito refinado mas dá pra dar uma idéia né.
Boa noite pessoal.
Bom usei essas formas que voces apresentaram, mas quando mudava o nome do documento, dava alguns erros, e como retornava muitas frases ficava dificil resolver. Então resolvi pagar para o programador que desenvolveu este aplicativo que gera csv para modificar e agora ele filtra os caracteres como ponto e virgula, retirou todas as aspas deixando somente no campo nome do documento, e deixou como delimitador a virgula, assim ficou bem mais facil e consegui resolver.
Pattern caract = Pattern.compile("\".*\"");
Matcher m = caract.matcher(linha);
while (m.find()) {
Agradeço a todos que fazem esta comunidade.