2009-12-01 20 views
11

Ho combattuto questo problema con l'aiuto di un foglio di trucchi RegEx, cercando di capire come farlo, ma mi arrendo ... Ho questo file lungo aperto in Notepad ++ e vorrebbe rimuovere tutte le righe che non iniziano con una cifra (0..9). Vorrei usare la funzionalità Trova/Sostituisci di N ++. Sto solo citando questo perché non sono sicuro di quale implementazione Regex sia N ++ usando ... GrazieRegex: rimuovere le righe che non iniziano con una cifra

Esempio. Dal testo seguente:

1hello 
foo 
2world 
bar 
3! 

vorrei estrarre

1hello 
2world 
3! 
non

:

1hello 

2world 

3! 

facendo una ricerca/sostituzione in un'espressione regolare.

+1

Ho usato questo http://stackoverflow.com/a/10731750 ha funzionato come un fascino –

risposta

21

È possibile cancellare quelle linee con ^[^0-9].* ma lascerà le righe vuote.

Notepad ++ usa scintilla, e usa anche il suo motore regex per abbinarli.

\ r \ n non sono mai abbinati perché in Scintilla, espressione normali ricerche sono realizzati linea per linea (spogliato di caratteri end-of-line).

http://www.scintilla.org/SciTERegEx.html

per chiarire queste righe vuote, unico modo è scegliere modalità estesa, e sostituire \ n \ n \ n, Se si è in Windows cambiamento di modalità \ r \ n \ r \ n a \ r \ n

+0

Oh, ok, penso che sarò soddisfatto da questa spiegazione. –

+4

un trucco intelligente che ho imparato in seguito per sbarazzarsi di righe vuote su Windows: sostituire \ n \ r con niente. In questo modo \ r \ n \ r \ n diventa \ r \ n. Qualsiasi numero di Mi piace vuoti verrà abbreviato in \ r \ n. –

+0

Nota la risposta segnalibro di Peter Perháč. Era proprio quello di cui avevo bisogno quando sono atterrato su questa pagina. (Sto aggiungendo questo commento alla risposta accettata, in quanto tale funzionalità potrebbe non essere disponibile in Notepad ++ quando la domanda è stata prima risolta.) – jcadcell

7

[^0-9] è un'espressione regolare che corrisponde praticamente a tutto, tranne le cifre. Se dici ^[^0-9] lo "ancorhi" all'inizio della linea, nella maggior parte dei sistemi di espressione regolari. Se si desidera includere il resto della linea, utilizzare ^[^0-9].+.

+0

ha funzionato ma ha lasciato un sacco di righe vuote. Come posso catturare anche l'interruzione di linea? –

+0

Hai provato ad aggiungere '[\ r \ n] *' alla fine della tua espressione? –

+0

Sembra che funzioni solo in "modalità estesa" in np ++, ma non in modalità regex. – moxn

6

^[^\d].* contrassegna un'intera riga il cui primo carattere non è una cifra. Controlla se non ci sono davvero spazi bianchi davanti alle cifre. Altrimenti dovresti usare un'espressione diversa.

UPDATE: Si dovrà fare ot in due passaggi. Prima svuota le linee che non iniziano con una cifra. Quindi rimuovere le linee vuote in modalità estesa.

+0

questo ha funzionato fino a trovare tutte le linee che non iniziano con una cifra, ma quando ho fatto una ricerca/sostituisci, cercando^[^ \ d]. * sostituendolo con niente, mi rimane ancora un sacco di righe vuote. Come avrei la tua regex anche catturare l'interruzione di riga? –

+0

Si potrebbe provare prima a rimuovere tutte le linee con cifre. E poi potresti passare alla "modalità estesa". L'ho provato e funziona per me per trovare interruzioni di riga qui con '\ r \ n'. Sostituirli con nothgin quindi. – moxn

+0

sì, questo è un modo testato nel tempo per farlo, ma speravo che tutto ciò potesse essere fatto in un solo passaggio. Forse se stavo usando qualche altro editor, ma è npp, e quindi mi accontento di farlo in due passi :) evviva –

1

Non sono sicuro di cosa stai chiedendo. ma il reg exp per trovare le righe con una cifra all'inizio sarebbe ^ \ d. * è possibile rimuovere tutte le righe che corrispondono a quanto sopra o mantenere alternativamente tutte le righe che corrispondono a questa espressione: ^ [^ \ d ]. *

+0

Sto cercando di capire quale parte della mia domanda non è chiara. Vorrei modificarlo, ma penso di essere abbastanza chiaro nel chiedere come 'rimuovere le righe che non iniziano con una cifra'? –

+0

quello che non era chiaro per me era come stai cercando di rimuovere. ora capisco che stai usando la ricerca e la sostituzione. prova a cercare ^ [^ \ d]. * e sostituire con \ b (che è il carattere backspace o alternativley * e questo ha funzionato per me in passato) cercare^[^ \ d]. * \ R e sostituire con nulla (la R deve essere maiuscola!)

se quest'ultimo è "avido" come in, cancella tutte le righe dopo la prima corrispondenza, quindi puoi provare a sostituire^[^ \ d] [^ \ R] * \ R woth nothing – codekitty

3

Si potrebbe anche utilizzare la tecnica del bookmarking in Notepad ++. Ho iniziato a trarre beneficio da questa funzione (presente a lungo, ma solo di recente resa un po 'più visibile nell'interfaccia utente) non molto tempo fa.

Basta aprire la finestra di dialogo Trova, digitare regex per le righe che non iniziano con la cifra ^\D.*$ e selezionare Seleziona tutto. Ciò posizionerà cerchi blu, come le biglie, nella grondaia di sinistra: si tratta di segnalibri di linea. Quindi basta selezionare dal menu principale Cerca -> Segnalibro -> Rimuovi linee con segnalibro.

I segnalibri sono fantastici, è possibile estrarre queste righe semplicemente selezionando per copiare linee con segnalibro, aprendo il nuovo documento e incollando le linee lì. A volte uso questa tecnica durante la revisione dei file di registro.

+0

Grande consiglio! Per rimuovere linee non abbinate c'è anche "Rimuovi le linee non contrassegnate". Spesso riesco facilmente a regex ciò che voglio mantenere; ora è facile rimuovere il resto. Grazie! – jcadcell

Problemi correlati