Risposte:
Ordina le righe in ordine alfabetico, se non lo sono già, ed esegui questi passaggi:
(in base a questa domanda correlata: come faccio a trovare e rimuovere le righe duplicate da un file utilizzando le espressioni regolari? )
Control+F
Attiva "Modalità di sostituzione"
Attiva / disattiva "Usa espressioni regolari" (l'icona con il .*
simbolo)
Nel campo di ricerca , digita^(.*)(\n\1)+$
Nel campo " sostituisci con ", digita$1
In questo caso, ricorri a una soluzione al di fuori di VS Code (vedi qui ) oppure, se il tuo documento non è molto grande e non ti dispiace inviare spam al pulsante Sostituisci tutto, segui i passaggi precedenti, ma nei passaggi 4 e 5, inserisci questi:
(basato su Rimuovi righe duplicate specifiche senza ordinamento )
Attenzione: blocchi per file con troppe righe (1000+); può causare l'arresto anomalo di VS Code; può introdurre righe vuote in alcuni casi.
cerca :((^[^\S$]*?(?=\S)(?:.*)+$)[\S\s]*?)^\2$(?:\n)?
sostituire con :$1
e quindi fare clic sul pulsante "Sostituisci tutto" tante volte quante sono le occorrenze duplicate .
Saprai che è sufficiente quando il conteggio delle righe smette di diminuire quando fai clic sul pulsante. Passa all'ultima riga del documento per tenerlo d'occhio.
^(.*)(\n\1)+$
. Dopo aver rimosso le righe duplicate, voglio guardare tutte le righe con la prima colonna duplicata nel CSV e voglio modificare la regex.
\r?
bit dell'altra risposta non è realmente necessario.
Ecco un'estensione molto interessante: Transformer
Caratteristiche:
Per rimuovere le righe duplicate:
Rimuove le righe duplicate dal documento
Funziona sulla selezione o sul blocco corrente se nessuna selezione
Non ci ho giocato molto a parte il comando "Linee uniche" ma sembra abbastanza ben fatto (incluso il tentativo di un registratore di macro!).
Da aggiungere alla risposta di @ Marc.2377.
Se l'ordine è importante e non ti interessa tenere solo l'ultima delle righe duplicate, cerca semplicemente la seguente espressione regolare se desideri rimuovere solo le righe duplicate non vuote
^(.+\n)(?=(?:.*\n)*?\1)
Se vuoi rimuovere anche le righe vuote duplicate, usa *
invece di+
^(.*\n)(?=(?:.*\n)*?\1)
e sostituire con niente.
Questo richiederà una linea e proverà a trovare altre (forse 0) linee seguite dalla stessa identica linea presa. Rimuoverà la linea presa.
Questa è solo una regex one-shot. Non è necessario inviare spam al pulsante di sostituzione.
^(.+\n)(?=(?:.*\n)*?\1)
invece perché la tua regex ha rimosso una riga vuota dove non era previsto. Votato comunque.
xxx(?=…)
è una partita anticipata. Quindi si assicura che, qualunque cosa segue "xxx" corrisponda a "...", ma non avanza la ricerca. (?:…)
è solo una parentesi che non conta nel conteggio delle parentesi. .*\n
è un modello per una riga (possibilmente vuota). *
significa che possono esserci più righe, anche nessuna. Il ?
dopo l'asterisco ( *
) significa che vogliamo il minor numero di righe possibile. Come \1
segue questa espressione l'effetto è che guardiamo avanti per tutte le linee che non corrispondono \1
fino a quando non troviamo una linea corrispondente \1
. Spero che questo lo renda chiaro.
Ho appena avuto lo stesso problema e ho trovato il pacchetto di Visual Studio Code "Ordina righe". Vedere il marketplace di Visual Studio Code per i dettagli (ad es. Linee di ordinamento ).
Questo pacchetto ha l'opzione "Linee di ordinamento (uniche)", che lo ha fatto per me. Prenditi cura di eventuali spazi bianchi all'inizio / alla fine delle righe. Influenzano il fatto che le linee siano considerate uniche o meno.
Installa l' estensione DupChecker , premi F1e digita "Check Duplicates".
Verificherà la presenza di duplicati e ti chiederà se desideri rimuoverli.
Prova a trovare e sostituire con un'espressione regolare .
Trova:
^(.+)((?:\r?\n.*)*)(?:\r?\n\1)$
Sostituire:
$1$2
È possibile introdurre qualche varianza nel primo gruppo.
Non in realtà in Visual Studio Code, ma se funziona, funziona.
Non è la risposta migliore, come hai specificato Visual Studio Code, ma come ho detto: se funziona, funziona :)
((^[^\S\r\n]*?(?=\S)(?:.*)+$)[\S\s]*?)^\2$(?:\r?\n)?
ha fatto il mio vscode crash .... Ho fatto una ricerca in un file 229 righe. :(