Notepad ++ regex: substitua um ou mais ponto e vírgula (s) de valor de texto por um traço, quando ponto-e-vírgula é o delimitador de campo

0

Estou lutando um pouco. O arquivo que preciso manipular é um csv com ponto-e-vírgula como delimitador de campo. Em alguns conjuntos de dados, foi adicionado um comentário que INCLUI um ponto e vírgula. Felizmente esses comentários começam e terminam com ".

Exemplo:

;;;"sometext many words or few ; more text; even more text";;;;;;

Eu preciso substituir todos os pontos-e-vírgulas entre os ", mas mantenha o texto. Obrigado por me ajudar.

Conjunto de dados de amostra:

Before Regex find & Replace:  
Fieldtitles: f1;f2;f3;f4;f5;f6;f7;f8;f9;f10;f11  
Dataset1: ;;text;text;;text;text;text;text;text;text  
Dataset2: text;"text text text ; text text";text;text;text;text;text;text;text;text;text

After Regex find & Replace:  
Fieldtitles: f1;f2;f3;f4;f5;f6;f7;f8;f9;f10;f11  
Dataset1: ;;text;text;;text;text;text;text;text;text  
Dataset2: text;"text text text _ text text";text;text;text;text;text;text;text;text;text  
    
por Sven 08.05.2018 / 15:33

2 respostas

1

  • Ctrl + H
  • Encontre o que: "[^";]*\K;(?=[^";]*")
  • Substituir por: _
  • check Embrulhe
  • verificar expressão regular
  • Substituir todos

Explicação:

"           : a double quote
[^";]*      : 0 or more any character that is not a double quote or a semicolumn
\K          : forget all we have seen until this position
;           : a semicolumn
(?=         : start lookahead, make sure we have, after current position,
  [^";]*    : 0 or more any character that is not a double quote or a semicolumn
  "         : a double quote
)           : ed lookahead

Substituição:

_       : an underscore

Resultado para o exemplo dado:

Fieldtitles: f1;f2;f3;f4;f5;f6;f7;f8;f9;f10;f11  
Dataset1: ;;text;text;;text;text;text;text;text;text  
Dataset2: text;"text text text _ text text";text;text;text;text;text;text;text;text;text    
    
por 10.05.2018 / 10:23
0

Na janela Substituir, especifique o seguinte:

  • Localize o quê: \"(.*?);(.*?)\"
  • Substituir por: "_"
  • Verifique o marcador de rádio Regular Expression .

Isso substituirá ; por _ nos comentários que incluem um semicolumn. Divisão de Regex:

  • \" - Comece a correspondência entre aspas duplas
  • (.*?); - corresponde tudo até o primeiro semicolumn
  • (.*?)\" - corresponde tudo até as próximas aspas duplas
  • "_" - imprime as aspas duplas e as subexpressões correspondentes # 1 e # 2, enquanto substitui ; por _ .

Se for possível ter vários pontos-e-vírgulas em um comentário, continue pressionando Replace All (com a opção Wrap around marcada) - ele substituirá um ponto-e-vírgula por comentário por vez, até que todos os ponto-e-vírgulas sejam substituídos.

    
por 08.05.2018 / 22:13