Trova e sostituisci il testo tra ^ e ~ in Notepad ++


22

Ho un grande file di testo in cui desidero rimuovere tutto il testo tra il simbolo ^ e il simbolo ~. Questo deve funzionare anche su più linee.

Ho provato a fare un normale Trova e sostituisci usando ^*~nella casella Trova e niente nella casella Sostituisci ma ho trovato 0 risultati.

Risposte:


24

Questo non è possibile con un normale Trova e sostituisci . Se usi Notepad ++ 6, puoi sfruttare il nuovo motore regex che supporta PCRE ( sorgente ).

Premi Ctrl+ Hper aprire la finestra di dialogo Trova e sostituisci ed esegui la seguente azione:

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

Ora premi Alt+ Aper sostituire tutte le occorrenze.

L'espressione regolare in Trova ciò che è composto come segue:

  • \^è un letterale ^ .
  • .*? è la quantità minima di caratteri che consente all'espressione regolare di corrispondere.
  • ~è un ~ letterale .

3
se si modifica. *? ~ in [^ ~] * ~, dovrebbe funzionare senza richiedere / utilizzare PCRE.
barlop

1
@barlop: ho usato regolarmente Trova e sostituisci come Modalità di ricerca: normale , non Trova e sostituisci usando espressioni regolari. Potrebbe essere stato un malinteso. In ogni caso, se ricordo bene, le versioni precedenti alla 6 non supportavano schemi multilinea.
Dennis,

Il .*?modello ha funzionato per me per cercare tra i personaggi di ;e <. Quindi la ricerca è TROVA ;.*?<SOSTITUISCI ;con le opzioni selezionate per Regular expressione. matches new line
SherlockSpreadsheets,

8

Avrai voglia di cercare \^.*?~e assicurarti . partite newline è abilitato:

inserisci qui la descrizione dell'immagine

Questo perché ^ha un significato speciale, corrisponde all'inizio di una riga. Pertanto, dobbiamo evitarlo con una barra rovesciata \^.

La scrittura ^*corrisponderebbe a "qualsiasi numero di inizio riga di fila". .*corrisponde a "qualsiasi carattere", ma per impostazione predefinita non corrisponde a nuove righe.


2
Fai attenzione al comportamento avido del regex. Se ci sono più ~caratteri (o cioè più corrispondenze), questo corrisponderà al primo ^fino all'ultimo ~.
pesante

@heavyd <question> Sei sicuro? </question>. Ha usato *?che non è avido, è pigro .*?~non potrà mai eguagliare più di uno ~. Così è ok.
barlop

@barlop: ha commentato poco dopo che ho risposto. Era una modifica ninja.
Der Hochstapler,

2

Prova a usare questo regex nella sezione find \^[^~]*~ per sostituire tutto tra ^ e ~ in modo inclusivo.


e per esclusivo, allora suppongo che richieda PCRE, quindi fare qualcosa (? <= ^) [^ ~] * (? = ~) Non ho n ++ per testarlo, ma se non riesce prova a cambiare (? <= ^ ) a (? <= \ ^)
barlop il

Per esclusivo, basta sostituire con ^~.
Dennis,

@Dennis intendo se vuole sostituire tutto tra ^ e ~ ma non includendo ^ e ~
barlop

1
Non è quello che si ottiene se si sostituisce \^[^~]*~con ^~?
Dennis,

@Dennis oh capisco cosa intendi, buon punto.
barlop

0

Avevo un requisito di sostituzione FRA simile con i caratteri di inizio e fine. Questo veniva dall'e-mail di Outlook; Hundereds di membri e volevo solo i nomi delle persone con tutto rimosso tra <RemoveTextHere> .

Originale

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 era vicino alla mia soluzione, Find what: \^.*?~ma ho dovuto cambiare i miei personaggi letterali, Find what: \<.*?>quindi ho dovuto rimuovere la prima barra Find what: <.*?>.

Aggiornato Find what: <.*?> ; Sostituisci vuoto.

First1 Last1 ; First2 Last2 ; First3 Last3 ; First4 Last4

_

Caratteri speciali : *, $, \, +, ^, (e ), [, ], {e}

I personaggi speciali sono descritti da Jerry Jeremiah qui /programming/37742519/notepad-wildcard .


Questo non risponde alla domanda.
Toto
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.