
Tenho vários arquivos de texto com algo semelhante aos seguintes exemplos:
{
{
1,
text1,
text2,
}
}
{
{
52,
text1,
text2,
}
}
{
{
105,
text1,
text2,
}
}
eu queria saber como eu poderia pesquisar em massa vários arquivos e substituí-los da seguinte maneira:
{
{
17001,
text1,
text2,
}
}
{
{
17052,
text1,
text2,
}
}
{
{
17105,
text1,
text2,
}
}
basicamente eu adicionaria 17.000 a cada um dos primeiros números após cada colchete duplo de abertura. Tentei usar \d\d\d para substituir números por 17\d\d\d mas isso me daria 17ddd a letra e não o número. Ajuda por favor
Responder1
Você tem dois problemas:
- Na string de substituição
\d
significa "imprimir umd
" e nada mais. Todas as coisas especiais de expressões regulares como\d
and\w
, etc. funcionam apenas no padrão de pesquisa, não na string de substituição. - Como disse @DavidPostill, 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:
- Use algum programa, script ou plugin para fazer as substituições para você. Qualquer versão disso é, como diz o comentário mencionado anteriormente, fora do assunto aqui.
- Use a pesquisa do Notepad++ e substitua 3 vezes.
- Primeira rodada para um único dígito,
- Segunda rodada para dois dígitos, e
- Terceira rodada para três dígitos.
- Se você tiver o Notepad++ superior à v6.0, poderá usar a sintaxe PCRE no regexp e usar oexcelente respostapor @ACR para fazer tudo de uma só vez.
Para fazer isso no método de três passagens, use as etapas a seguir. Talvez seja necessário modificar os padrões de pesquisa para capturar o que você deseja e apenas o que deseja. Eles funcionam no exemplo fornecido acima, mas seus arquivos podem ser mais complexos que o exemplo.
Primeiro round
Encontre isto:
(\s+)(\d),
Substitua por isto:
\11700\2,
Segundo round
Encontre isto:
(\s+)(\d\d),
Substitua por isto:
\1170\2,
Terceira Rodada
Encontre isto:
(\s+)(\d\d\d),
Substitua por isto:
\117\2,
O que faz
No Find this
padrão \s+
encontra todos os espaços em branco que podem ser encontrados antes do próximo token, exigindo pelo menos um para evitar a correspondência de um número após qualquer coisa que não seja um espaço em branco. O ()
entorno faz dela a primeira string capturada retornada pela partida. Em vez disso, corresponde \d
a um dígito e os grupos \d\d
fazem \d\d\d
com que corresponda exatamente a 2 ou três dígitos. Novamente, ()
transforme-o em um grupo de captura, desta vez o segundo. Finalmente, ,
corresponde à vírgula após os números, o que o mantém na mesma linha em seu arquivo de amostra.
No Replace with this
, o \1
é substituído pelo primeiro grupo de captura (os espaços). 1700
, 170
e 17
imprima a parte que precisa ser adicionada à linha. O \2
é substituído pelo segundo grupo de captura, que é o(s) dígito(s) que você possui no padrão de localização. Finalmente, a vírgula ,
é explicitamente substituída, em vez de desperdiçar um grupo de captura para ela.
Responder2
Você pode fazer isso com uma única localização e substituição. 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*)$
Substituir com:
$1(?{2}17$2)(?{3}170$3)(?{4}1700$4)$5
Explicação da expressão Find
Procedendo de fora para dentro:
- Os caracteres
^
e$
marcam o início e o fim de uma linha, respectivamente. - Corresponde
(\s*)
ao espaço em branco no início e(,\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
{n}
sintaxe). Cada grupo é seguido por um?
para marcá-lo como possivelmente não correspondente. A ordem dos grupos é importante, pois os grupos são combinados 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 seguintes. Se houver dois dígitos, o primeiro grupo não corresponderá, o segundo grupo corresponderá e o primeiro grupo não terá nenhum dígito correspondente.
Explicação da expressão de substituição
- O
$1
e$5
corresponderá ao espaço em branco no início da linha e à vírgula e ao espaço em branco no final da linha. - Os seguintes grupos (listados na ordem oposta acrescentam "17" mais o número correto de zeros com base em qual grupo foi correspondido na expressão de localização. Por exemplo, pegue o primeiro grupo
(?{2}17$2)
. As?{2}
verificações para ver se o grupo 2 foi correspondido ou não . Nesse caso, insere o seguinte texto: “17” mais a correspondência do grupo 2, que deve ser um número de três dígitos.