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.

Esplendor
fonte

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 ~ .
Dennis
fonte
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.

Der Hochstapler
fonte
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.

barlop
fonte
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 <[email protected]>; First2 Last2 <[email protected]>; First3 Last3 <[email protected]>; First4 Last4 <[email protected]>;

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 .

SherlockSpreadsheets
fonte
Isso não responde à pergunta.
Toto