Comment supprimer tous les mots en double sur chaque ligne en utilisant Notepad ++?


11

Je travaille sur un fichier contenant des lignes avec des mots clés et certaines lignes contiennent des mots clés en double.

Par exemple:

dangerous,dangerous,hazardous,perilous

Je veux dire à Notepad ++ que je veux supprimer chaque mot dupliqué par ligne. Pour cet exemple dangerous,serait supprimé:

dangerous,hazardous,perilous

J'ai un tas de lignes comme ça et c'est pourquoi je recherche un moyen automatisé de le faire.


1
Et alors dangerous,hazardous,dangerous,perilous? En d'autres termes, les mots en double sont-ils toujours côte à côte?
Daniel Beck

Réponses:


11

Vous pouvez utiliser une expression régulière pour supprimer des mots en double consécutifs dans une ligne, mais je ne pense pas qu'il soit possible de supprimer des mots en double qui ne sont pas consécutifs (par exemple dangerous, hazardous, dangerous).

Utilisez cette expression régulière dans la fenêtre de remplacement dans Notepad ++, et n'oubliez pas de sélectionner "Expression régulière" comme option de mode de recherche ci-dessous:

Ce regex va supprimer tous les mots dupliqués consécutifs - que ce soit 2 mots dupliqués ou 10 mots dupliqués consécutivement: \b(\w+)(?:,\s+\1\b)+ .

La même expression régulière sans virgule serait: \b(\w+)(?:\s+\1\b)+(pourrait être utile pour d'autres utilisateurs).

Si vous voulez un regex spécifiquement pour seulement deux mots en double (double), utilisez cette expression rationnelle: (\b\w+\b)\W+\1.

Placez ce regex dans le remplacer par boîte pour garder une occurrence du mot (sinon tous les mots répétés seront supprimés): ${1} .

Ces expressions régulières corrigeront une situation comme celle que vous avez décrite dans votre question à titre d'exemple. Le premier regex fonctionnera pour chaque nombre de mots dupliqués (par exemple dangerous, dangerous, dangerous, dangerous, hazardous), tandis que la deuxième version ne fonctionnera que pour deux mots dupliqués (par exemple dangerous, dangerous, hazardous).

Note: L'expression régulière ne s'appliquera au format décrit dans la question, ce qui signifie que des formats comme two words, two words, anotherword, two-words, two-words, anotherword, three words expression, three words expression, anotherwordne sera pas modifiée parce que l'expression rationnelle ne sera pas applicable à eux.


Merci pour l'aide! Cependant, je reçois 0 occurrence, j'ai essayé de le faire avec des mots clés séparés comme vous l'avez suggéré et cela n'a pas fonctionné, j'ai également essayé comme avant et rien, veuillez vérifier ma capture d'écran: goo.gl/eZ7Kp
Gabriel

Cette expression régulière devrait fonctionner: (\b\w+\b)\W+\1pour deux mots en double. Je vais modifier ma réponse. Les virgules sont la raison pour laquelle l'autre expression régulière ne fonctionne pas.
amiregelz

J'ai essayé toutes les combinaisons possibles, pas de virgule, seulement des espaces, pas d'espace et de virgule, et pourtant rien. Veuillez m'éclairer, voici le fichier texte: goo.gl/sP20z
Gabriel

Le problème est que l'expression régulière que j'ai écrit dans ma réponse applique uniquement au format (je pensais) que vous avez demandé: word, word, anotherword. Cependant, vous avez de nombreux exemples qui sont un peu différents, comme came across, came acrosset certains avec 3 ou 4 mots. Il y a aussi des mots avec 'comme don'tet cela rend les choses plus compliquées dans le système d'expression régulière Notepad ++ . Le système regex Notepad ++ est assez ennuyeux et limité également, donc la solution consiste à utiliser regex en python (ou une autre langue), ou à créer des expressions régulières spécifiques au format pour le Notepad ++.
amiregelz

Un autre problème est que la plupart des mots qui sont dupliqués apparaissent également dans la ligne précédente, ce qui rend difficile la réalisation de votre objectif. Si vous souhaitez supprimer tous les mots en double, ce n'était pas si difficile. Vous pourriez faire quelque chose comme ça et ça . Je vous suggère d'utiliser des expressions régulières spécifiques dans Notepad ++ (je peux vous aider, dites-moi simplement tous les formats des mots dupliqués) ou envisagez une approche différente de votre problème.
amiregelz

1

Voici une façon de faire le travail, cela remplacera tous les mots en double même s'ils ne sont pas contigus:

  • Ctrl+H
  • Trouver quoi: (?:^|\G)(\b\w+\b),?(?=.*\1)
  • Remplacer par: LEAVE EMPTY
  • check Wrap around
  • check Expression régulière
  • NE VÉRIFIEZ PAS . matches newline
  • Replace all

Explication:

(?:^|\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

Étant donné une entrée comme: dangerous,dangerous,hazardous,perilous,dangerous,dangerous,hazardous,perilous

Nous avons:

dangerous,hazardous,perilous
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.