
Preciso de ajuda com Localizar e Substituir no Notepad++.
Exemplo:
$ 250 'Olá 1' Pegue '____'
$ 500 'Olá 2' Pegue '____'
$ 1000 'Olá 3' Pegue '____'
Imagine que existem milhares dessas entradas até 'Hello 9999'.
Quero substituir '____' por um número sem alterar 'Hello 1' ou 'Hello 2'.
Eu gostaria que o resultado fosse:
$ 250 'Olá 1' Leve '250'
$ 500 'Olá 2' Leve '500'
$ 1.000 'Olá 3' Leve '1.000'
Como posso fazer isso? Eu esperaria usar uma expressão regular.
Responder1
Marque a caixa de seleção da expressão regular e use:
Procurar:
\$(.*?) (.*?) Take '(.*?)'
Substituir:
\$$1 $2 Take '$1'
Isso irá procurar uma linha que basicamente se parece com isto:
$anything anything Take 'anything'
.*? significa qualquer caractere, exceto uma nova linha em expressões regulares.
Colocando parênteses em torno de um grupo de captura como .*? irá armazenar o conteúdo dele em uma variável que é $n onde n é o n-ésimo grupo.
Assim após a busca teremos três variáveis:
$1 = 250 $2 = 'Olá 1' $3 = ___
Com a substituição, substituímos toda a linha real por \$ (escapar do cifrão torna-o um $ literal e não uma variável).
A linha inteira é substituída por $$1 $2 '$1'
Como você pode ver, usamos novamente a variável $1 que é o primeiro grupo de captura.
Sou muito novo no SO, desculpe se minhas explicações não são tão boas.
Responder2
Esta deve ser a sintaxe do Notepad++, tendo selecionado o botão de opção "Expressão Regular" na parte inferior da caixa de diálogo Localizar/Substituir:
Find: (\$(\d+).*Take\s+').*(')
Replace: \1\2\3
Explicação:
Variáveis de grupo entre parênteses em ordem contando da esquerda para a direita:
(\$(\d+).*Take\s+').*(')
|--------1--------|
|-2-| |3|
\$: significa encontrar o cifrão
\d+ : significa encontrar dígitos, "+" no final significa um ou mais (ou seja, DEVE ter pelo menos um dígito).
.*: "." significa QUALQUER caractere e "*" significa um ou mais.
Take : é especificamente a palavra Texto.
\s+ : significa caracteres de espaço e "+" significa um ou mais.
...
Agora, como tudo está agrupado, EXCETO os últimos caracteres entre aspas simples, então:
\1\2\3
Apenas coloca o primeiro e o terceiro parênteses, com o segundo entre (onde o segundo parêntese é o valor em dólar).
Responder3
Experimente isto
Primeiro ative as expressões regulares
https://regex101.com/r/aW4gG2/2
Localizar: (\$\d+)(.*Take ')(.*)(')
Substituir:\1\2\1\4
Capturar
Existem quatro grupos para esta expressão
Entrada:$250 'Hello 1' Take '____'
Grupo 1
(\$d+)
= $250
- diz começar com $ (escapou para ser literal) e depois dígitos ( \d
) 1 ou mais, parando no último dígito, seja 3 ou 15. No seu exemplo, eles estavam no início da linha, mas eu não assuma isso. Se, no entanto, eles iniciarem a linha, você pode querer adicionar um ^
tornando-a^(\Sd+)
Grupo 2
(.*Take ')
= 'Hello 1' Take '
- a expressão diz .*
o que significa qualquer caractere qualquer número de vezes então ele pega tudo até ver Take
e depois pega Take '
porque eu escrevi isso e para por aí.
Grupo 3
(.*)
= - ____
isso ocupa o espaço interno basicamente leva qualquer coisa 0 ou mais vezes. Nesse caso, está tudo sublinhado, mas escrito pegaria tudo e qualquer coisa que você tiver lá. Ele pegaria tudo até o final das linhas, exceto que tenho algo a seguir que informa quando parar
Grupo 4
(')
= - '
isto diz ao grupo 3 para parar na '
marca. ele também captura a '
marca em seu próprio grupo para reorganização.
Substituição
\1\2\1\4
Os grupos são numerados a partir dos parênteses abertos, mas neste caso tudo é linear, sem aninhamento, por isso é bastante óbvio. \1\2\3\4
deixaria tudo como está. Mas queremos substituir o terceiro grupo pelo primeiro grupo, então... \1\2\1\4
resolve. Um dos pontos-chave aqui foi garantir que capturamos o quarto grupo para substituí-lo no final. Além disso, nada muito complicado.
Execução
Então, basta configurar isso em localizar substituir e clicar em substituir tudo e isso deve consertar você.
Editar
Percebi que você queria retirar o $ do seu substituto, então você precisa fazer algumas pequenas alterações nas minhas sugestões iniciais, embora sejam basicamente as mesmas.
Entrada:$250 'Hello 1' Take '____'
Localizar: (\$)(\d+)(.*Take ')(.*)(')
Substituir:\1\2\3\2\5