Capturar

Capturar

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

Configurações do Notepad ++ para ativar 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 Takee 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\4deixaria tudo como está. Mas queremos substituir o terceiro grupo pelo primeiro grupo, então... \1\2\1\4resolve. 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

informação relacionada