Come rimuovere tutte le parole duplicate su ogni riga usando Notepad ++?


11

Sto lavorando a un file contenente righe con parole chiave e alcune righe contengono parole chiave duplicate.

Per esempio:

dangerous,dangerous,hazardous,perilous

Voglio dire a Notepad ++ che voglio rimuovere ogni parola duplicata per riga. Per questo esempio dangerous,verrebbe rimosso:

dangerous,hazardous,perilous

Ho un sacco di righe del genere ed è per questo che sto cercando un modo automatizzato per farlo.


1
Che dire dangerous,hazardous,dangerous,perilous? In altre parole, le parole duplicate sono sempre una accanto all'altra?
Daniel Beck

Risposte:


11

È possibile utilizzare un'espressione regolare per rimuovere le parole duplicate consecutive in una riga, tuttavia non credo sia possibile rimuovere le parole duplicate che non sono consecutive (ad es dangerous, hazardous, dangerous.).

Usa questo regex nella finestra di sostituzione in Notepad ++ e non dimenticare di selezionare "Espressione regolare" come opzione di ricerca in basso:

Questa espressione regolare rimuoverà tutte le parole duplicate consecutive - che si tratti di 2 parole duplicati o 10 parole duplicati consecutivamente: \b(\w+)(?:,\s+\1\b)+ .

Lo stesso regex senza virgole sarebbe: \b(\w+)(?:\s+\1\b)+(potrebbe essere utile per altri utenti).

Se si desidera un regex appositamente per solo due parole duplicati (doppie), utilizzare questa espressione regolare: (\b\w+\b)\W+\1.

Inserire questo regex nella Sostituire con scatola per mantenere un'occorrenza della parola (parole altrimenti tutto ripetute saranno rimossi): ${1} .

Queste espressioni regolari risolveranno una situazione come quella che hai descritto nella tua domanda come esempio. Il primo regex funzionerà per ogni numero di parole duplicate (ad es. dangerous, dangerous, dangerous, dangerous, hazardous), Mentre la seconda versione funzionerà solo per due parole duplicate (ad es dangerous, dangerous, hazardous.).

Nota: L'espressione regolare sarà valido solo per il formato descritto nella domanda, il che significa che formati come two words, two words, anotherword, two-words, two-words, anotherword, three words expression, three words expression, anotherwordnon sarà cambiato, perché l'espressione regolare non si applica a loro.


Grazie per l'aiuto! Tuttavia sto ricevendo 0 occorrenze, ho provato a farlo con parole chiave separate come da te suggerito e non ha funzionato, ho provato anche come prima e niente, controlla la mia schermata: goo.gl/eZ7Kp
Gabriel

Questa regex dovrebbe funzionare: (\b\w+\b)\W+\1per due parole duplicate. Modificherò la mia risposta. Le virgole sono perché l'altro regex non funziona.
amiregelz,

Ho provato ogni possibile combinazione, senza virgole, solo spazi, senza spazio e virgola, eppure niente. Per favore illuminami, ecco il file di testo: goo.gl/sP20z
Gabriel,

Il problema è che l'espressione regolare che ho scritto nella mia risposta è valida solo per il formato (ho pensato) che hai chiesto: word, word, anotherword. Tuttavia, hai molti casi che sono un po 'diversi, come came across, came acrosse alcuni con 3 o 4 parole. Inoltre ci sono parole con 'like don'te rende le cose più complicate nel sistema regex di Notepad ++ . Il sistema regex di Notepad ++ è piuttosto fastidioso e anche limitato, quindi la soluzione è usare regex in python (o un'altra lingua) o creare espressioni regolari specifiche del formato per Notepad ++.
amiregelz,

Un altro problema è che la maggior parte delle parole duplicate appare anche nella riga precedente, il che rende difficile raggiungere il tuo obiettivo. Se desideri rimuovere tutte le parole duplicate, non è stato così difficile. Si potrebbe fare qualcosa di simile a questo e questo . Ti suggerisco di utilizzare espressioni regolari specifiche in Notepad ++ (posso aiutarti, dimmi solo tutti i formati delle parole duplicate) o prendere in considerazione un approccio diverso al tuo problema.
amiregelz,

1

Ecco un modo per fare il lavoro, questo sostituirà tutte le parole duplicate anche se non contigue:

  • Ctrl+H
  • Trovare cosa: (?:^|\G)(\b\w+\b),?(?=.*\1)
  • Sostituirlo con: LEAVE EMPTY
  • seleziona Avvolgi
  • seleziona Espressione regolare
  • NON CONTROLLARE . matches newline
  • Replace all

Spiegazione:

(?:^|\G)    : non capture group, beginning of line or position of last match
(\b\w+\b)   : group 1, 1 or more word character (ie. [a-zA-Z0-9_]), surrounded by word boundaries
,?          : optional comma
(?=.*\1)    : positive lookahead, check if thhere is the same word (contained in group 1) somewhere after

Dato un input come: dangerous,dangerous,hazardous,perilous,dangerous,dangerous,hazardous,perilous

Noi abbiamo:

dangerous,hazardous,perilous
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.