[RESOLVIDO] Expressao regular com ";"

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.