Substituir o enésimo elemento da lista por regex

0

Eu tenho um arquivo com listas de strings separadas por ponto e vírgula, como este:

aaaa;bbb;ccccccc;dd;  
eeee;fff;ggggggg;hh;  
iiii;jjj;kkkkkkk;ll;

e estou procurando uma expressão regex para substituir o enésimo elemento de todas as linhas (usando o Notepad ++ v6.8.3, o mecanismo regex seguindo principalmente a sintaxe Perl). Eu acredito nessa expressão

^([^\;]*\;){n}([^;]*)

com n sendo um número irá capturar tudo até o ponto-e-vírgula. Do que preciso substituí-lo para alterar apenas a enésima entrada de todas as linhas?

Como exemplo: Se n = 3, gostaria que uma regex e a substituição obtivessem

aaaa;bbb;xxxxxxx;dd;  
eeee;fff;xxxxxxx;hh;  
iiii;jjj;xxxxxxx;ll;
    
por Seetrg Bfaf 03.10.2015 / 20:44

1 resposta

0

Pesquisa:

^((?:[^;]*;){2})([^;]*;)([^;]*)

Substituir:

xxxxxx;

O que eu mudei:

  • fez o grupo com o quantificador não capturar ( ?: ) e adicionou um grupo de captura em torno dele para capturar tudo de uma só vez
  • alterou n para n-1 e copiou o grupo interno ([^;]*;) para capturar o grupo th separadamente
  • removeu algum escape supérfluo
por 04.10.2015 / 16:48