Localizar e substituir texto entre ^ e ~ no Notepad ++


22

Eu tenho um arquivo de texto grande onde desejo remover todo o texto entre o símbolo ^ e o símbolo ~. Isso precisa funcionar além das linhas.

Tentei fazer uma ^*~busca e substituição regulares usando a caixa Localizar e nada na caixa Substituir, mas ele encontrou 0 resultados.

Respostas:


24

Isso não é possível com um Localizar e substituir regular . Se você usar o Notepad ++ 6, poderá tirar proveito do novo mecanismo de expressão regular que suporta PCRE ( origem ).

Pressione Ctrl+ Hpara abrir a caixa de diálogo Localizar e substituir e execute a seguinte ação:

Find what:          \^.*?~
Replace with:       
Wrap around:        checked
Regular expression: selected
. matches newline:  checked

Agora pressione Alt+ Apara substituir todas as ocorrências.

A expressão regular em Localizar o que é composto da seguinte maneira:

  • \^é um literal ^ .
  • .*? é a menor quantidade de caracteres que permite a correspondência da expressão regular.
  • ~é um literal ~ .

3
se você alterar. *? ~ para [^ ~] * ~, deve funcionar sem exigir / usar PCRE.
22133 barlop

11
@ Barlop: Tomei regularmente Localizar e Substituir como Modo de Pesquisa: Normal , não Localizar e Substituir usando expressões regulares. Isso pode ter sido um mal-entendido. De qualquer forma, se bem me lembro, as versões anteriores ao 6 não suportavam padrões de várias linhas.
21413 Dennis

O .*?padrão funcionou para eu pesquisar entre os caracteres de ;e <. Portanto, a pesquisa é ENCONTRAR ;.*?<SUBSTITUIR ;com as opções selecionadas para Regular expressione. matches new line
SherlockSpreadsheets

8

Você vai querer procurar \^.*?~e ter certeza . corresponde à nova linha ativada:

insira a descrição da imagem aqui

Isso ocorre porque ^tem um significado especial, corresponde ao início de uma linha. Portanto, precisamos escapar com uma barra invertida \^.

A escrita ^*corresponderia a "qualquer número de início de linha consecutivo". .*corresponde a "qualquer caractere", mas, por padrão, não corresponde a novas linhas.


2
Tenha cuidado com o comportamento ganancioso da regex. Se houver vários ~caracteres (ou seja, várias correspondências), isso corresponderá ao primeiro ^até o último ~.
19613 heavyd

@heavyd <question> Você tem certeza? </question>. Ele usou *?que não é ganancioso, é preguiçoso .*?~nunca vai corresponder a mais de um ~. Então está tudo bem.
19413 barlop

@ Barlop: Ele comentou logo depois que eu respondi. Era uma edição ninja.
Der Hochstapler

2

Tente usar este regex na seção find \^[^~]*~ para substituir tudo entre ^ e ~ inclusive.


e exclusivamente, então, suponho que exija PCRE, faça algo (? <= ^) [^ ~] * (? = ~) Não tenho n ++ para testá-lo, mas se isso falhar, tente alterar (? <= ^ ) para (? <= \ ^)
barlop

Exclusivamente, basta substituir por ^~.
21413 Dennis

@ Dennis Quero dizer, se ele quer substituir tudo entre a ^ e ~ mas não incluindo o ^ e ~
barlop

11
Não é isso que você ganha se você substitua \^[^~]*~com ^~?
21413 Dennis

@ Dennis oh eu entendo o que você quer dizer, bom ponto.
22133 barlop

0

Eu tinha um requisito de substituição ENTRE semelhantes com caracteres de início e fim. Isso veio do email do Outlook; centenas de membros e eu só queria os nomes das pessoas com tudo removido entre <RemoveTextHere> .

Original

First1 Last1 <First1.Last1@email.com>; First2 Last2 <First2.Last2@email.com>; First3 Last3 <First3.Last3@email.com>; First4 Last4 <First4.Last4@email.com>;

Dennis estava perto da minha solução, Find what: \^.*?~mas tive que mudar meus caracteres literais e Find what: \<.*?>depois remover a primeira barra Find what: <.*?>.

Atualizado Find what: <.*?> ; Substitua vazio.

First1 Last1 ; First2 Last2 ; First3 Last3 ; First4 Last4

_

Caracteres especiais : *, $, \, +, ^, (e ), [, ], {e}

Caracteres especiais são descritos por Jerry Jeremiah aqui /programming/37742519/notepad-wildcard .


Isso não responde à pergunta.
Toto
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.