Regex para encontrar vírgulas, excluindo vírgulas dentro de uma string demarcada por aspas duplas

3

Eu gostaria de manipular um arquivo .csv fechado sem abri-lo através de um botão em um Excel AddIn. Eu sou capaz de concluir todas as etapas, mas estou tendo um problema em encontrar um regex que iria conseguir isso. (existem várias respostas para perguntas similares na rede em vários quadros de avisos, e nenhuma delas realmente funciona.

Aqui está o código de exemplo, com a aparência da solução:

Eutenteiváriosregexps,masnãoconsigoencontrarasolução.Minhastentativasmaispróximassão:

Eu sinto que deve haver uma possibilidade de fazer isso. Alguma ajuda sobre onde estou indo errado?

    
por Francois 02.11.2015 / 16:44

1 resposta

2

Você pode fazer isso em dois passes. Primeiro, para substituir vírgulas não citadas:

/(?!\B"[^"]*),(?![^"]*"\B)/\|/gm

Input                               Output
---------------------------------   ---------------------------------
aaa,bbb,ccc,"ddd,eee","fff,ggg"     aaa|bbb|ccc|"ddd,eee"|"fff,ggg"
"aaa,bbb",ccc,ddd,"eee,fff"         "aaa,bbb"|ccc|ddd|"eee,fff"
"aaa,bbb","ccc,ddd","eee,fff",ggg   "aaa,bbb"|"ccc,ddd"|"eee,fff"|ggg

Aqui está uma demonstração on-line da primeira etapa

Em seguida, uma simples substituição de "por nada fornecerá o resultado final desejado:

/"//gm

Input                               Output
---------------------------------   ---------------------------------
aaa|bbb|ccc|"ddd,eee"|"fff,ggg"     aaa|bbb|ccc|ddd,eee|fff,ggg
"aaa,bbb"|ccc|ddd|"eee,fff"         aaa,bbb|ccc|ddd|eee,fff
"aaa,bbb"|"ccc,ddd"|"eee,fff"|ggg   aaa,bbb|ccc,ddd|eee,fff|ggg

E aqui está uma demonstração on-line da segunda etapa

Isso se baseia em esta resposta no Stack Overflow .

    
por 16.11.2016 / 19:08