Múltipla linha substitui e carrega no notepad ++

2

Eu tenho vários arquivos de texto com algo semelhante aos exemplos a seguir:

{
    {
        1,
        text1,
        text2,
    }
}
{
    {
        52,
        text1,
        text2,
    }
}
{
    {
        105,
        text1,
        text2,
    }
}

Eu estava imaginando como eu poderia pesquisar em massa vários arquivos e substituí-los da seguinte forma:

{
    {
        17001,
        text1,
        text2,
    }
}
{
    {
        17052,
        text1,
        text2,
    }
}
{
    {
        17105,
        text1,
        text2,
    }
}

basicamente eu estaria adicionando 17.000 para cada um dos primeiros números após cada colchetes de abertura dupla. Eu tentei usar \ d \ d \ d para substituir números com 17 \ d \ d \ d mas então ele me daria 17ddd a letra não o número. Ajuda por favor

    
por Akira Whitlock 13.03.2017 / 01:06

2 respostas

3

Você tem dois problemas:

  1. Na string de substituição, \d significa "imprimir a d " e nada mais. Todas as expressões especiais como \d e \w , etc. funcionam apenas no padrão de pesquisa, não na sequência de substituição.
  2. Como o @DavidPostill disse, o Notepad ++ não pode fazer matemática na pesquisa / substituição de regexp.

Você tem três opções para fazer o que quiser:

  1. Use algum programa, script ou plug-in para fazer as substituições por você. Qualquer versão disso é, como diz o comentário mencionado anteriormente, off-topic aqui.
  2. Use o Notepad ++ para pesquisar e substituir 3 vezes.
    • Redonda para um dígito,
    • Round dois para dois dígitos e
    • Arredondam três para três dígitos.
  3. Se você tiver o Notepad ++ maior que a v6.0, poderá usar a sintaxe PCRE no regexp e usar o excelente resposta por @ACR para fazer tudo de uma só vez.

Para realizar isso no método de três passagens, use as etapas a seguir. Você pode ter que modificar os padrões de pesquisa para capturar o que quiser e apenas o que deseja. Eles trabalham na amostra que você forneceu acima, mas seus arquivos podem ser mais complexos que a amostra.

Round 1

Encontre isto:

(\s+)(\d),

Substitua por:

700,

Round 2

Encontre isto:

(\s+)(\d\d),

Substitua por:

70,

Round Three

Encontre isto:

(\s+)(\d\d\d),

Substitua por:

7,

O que faz

No Find this padrão \s+ encontra todo o espaço em branco que pode ser encontrado antes do próximo token, exigindo pelo menos um para impedir que um número seja seguido de outra coisa que não seja espaço em branco. O () em torno dele torna a primeira string capturada retornada pela correspondência. O \d corresponde a um dígito e os grupos \d\d e \d\d\d fazem corresponder dois ou três dígitos, exatamente. Novamente, o () o transforma em um grupo de captura, o segundo dessa vez. Finalmente, o , corresponde à vírgula após os números, o que a mantém na mesma linha do arquivo de amostra.

No Replace with this , o é substituído pelo primeiro grupo de captura (os espaços). 1700 , 170 e 17 imprimem a parte que precisa ser adicionada à linha. O é substituído pelo segundo grupo de captura, que é o (s) dígito (s) que você tem no padrão de localização. Finalmente, a vírgula , é explicitamente substituída, em vez de desperdiçar um grupo de captura para ela.

    
por 14.03.2017 / 18:27
2

Você pode fazer isso com um único localizar e substituir. O Notepad ++ permite que você faça uma substituição condicional com base na correspondência de um grupo.

Encontre o que:

^(\s*)(\d{3})?(\d{2})?(\d{1})?(,\s*)$

Substitua por:

$1(?{2}17$2)(?{3}170$3)(?{4}1700$4)$5

Explicação do Find-Expression

Continuando do lado de fora para dentro:

  • Os caracteres ^ e $ marcam o início e o fim de uma linha, respectivamente.
  • O (\s*) corresponde ao espaço em branco no início e o (,\s*) corresponde à vírgula e a qualquer espaço em branco no final da linha.
  • No meio, temos três grupos diferentes para corresponder a 3, 2 ou 1 dígitos (usando a sintaxe {n} ). Cada grupo é seguido por um ? para marcá-lo como possivelmente não correspondente. A ordem dos grupos é importante, pois os grupos são correspondidos na ordem em que aparecem. Se houver três dígitos, o primeiro grupo corresponderá e não haverá mais dígitos para os dois grupos a seguir. Se houver dois dígitos, o primeiro grupo não corresponderá, o segundo grupo corresponderá e o primeiro não terá nenhum dígito correspondente.

Explicação da Replace-Expression

  • O $1 e $5 corresponderão ao espaço em branco no início da linha e à vírgula e espaço em branco no final da linha.
  • Os grupos a seguir (listados na ordem oposta acrescentam "17" mais o número correto de zeros com base no grupo que foi correspondido na expressão de localização. Por exemplo, pegue o primeiro grupo (?{2}17$2) . Os controles ?{2} para ver se o grupo 2 foi correspondido ou não. Em caso afirmativo, insere o seguinte texto: "17" mais a correspondência para o grupo 2, que deve ser um número de três dígitos.
por 14.03.2017 / 20:04

Tags