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.
notepad++
text-editors
duplicate
Gabriel
la source
la source
dangerous,hazardous,dangerous,perilous
? En d'autres termes, les mots en double sont-ils toujours côte à côte?Réponses:
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 exempledangerous, 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, anotherword
ne sera pas modifiée parce que l'expression rationnelle ne sera pas applicable à eux.la source
(\b\w+\b)\W+\1
pour 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.word, word, anotherword
. Cependant, vous avez de nombreux exemples qui sont un peu différents, commecame across, came across
et certains avec 3 ou 4 mots. Il y a aussi des mots avec'
commedon't
et 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 ++.Voici une façon de faire le travail, cela remplacera tous les mots en double même s'ils ne sont pas contigus:
(?:^|\G)(\b\w+\b),?(?=.*\1)
LEAVE EMPTY
. matches newline
Explication:
Étant donné une entrée comme:
dangerous,dangerous,hazardous,perilous,dangerous,dangerous,hazardous,perilous
Nous avons:
la source