Estou trabalhando em um arquivo que contém linhas com palavras-chave e algumas linhas contêm palavras-chave duplicadas.
Por exemplo:
dangerous,dangerous,hazardous,perilous
Quero dizer ao Notepad ++ que desejo remover todas as palavras duplicadas por linha. Para este exemplo dangerous,
seria removido:
dangerous,hazardous,perilous
Eu tenho várias linhas assim e é por isso que estou procurando uma maneira automatizada de fazer isso.
notepad++
text-editors
duplicate
Gabriel
fonte
fonte
dangerous,hazardous,dangerous,perilous
? Em outras palavras, as palavras duplicadas estão sempre próximas uma da outra?Respostas:
Você pode usar uma expressão regular para remover palavras duplicadas consecutivas em uma linha, no entanto, não acho possível remover palavras duplicadas que não são consecutivas (por exemplo
dangerous, hazardous, dangerous
).Use este regex na janela de substituição no Notepad ++ e não se esqueça de selecionar "Expressão regular" como a opção Modo de pesquisa abaixo:
Este regex irá remover todas as palavras duplicadas consecutivas - se é 2 palavras duplicadas ou 10 palavras duplicadas consecutivamente:
\b(\w+)(?:,\s+\1\b)+
.O mesmo regex sem vírgulas seria:
\b(\w+)(?:\s+\1\b)+
(pode ser útil para outros usuários).Se você quer um regex especificamente para apenas duas palavras duplicadas (duplos), use esse regex:
(\b\w+\b)\W+\1
.Coloque este regex na substituir com caixa para manter uma ocorrência da palavra (caso contrário, todas as palavras repetidas serão removidos):
${1}
.Essas expressões regulares resolverão uma situação como a descrita na sua pergunta como exemplo. O primeiro regex funcionará para todo número de palavras duplicadas (por exemplo
dangerous, dangerous, dangerous, dangerous, hazardous
), enquanto a segunda versão funcionará apenas para duas palavras duplicadas (por exemplodangerous, dangerous, hazardous
).Nota: A expressão regular só se aplica ao formato descrito na pergunta, significado que formata como
two words, two words, anotherword
,two-words, two-words, anotherword
,three words expression, three words expression, anotherword
não será alterado porque a regex não se aplica a eles.fonte
(\b\w+\b)\W+\1
para duas palavras duplicadas. Vou editar minha resposta. As vírgulas são o motivo pelo qual a outra regex não funciona.word, word, anotherword
. No entanto, você tem muitas instâncias que são um pouco diferentes, comocame across, came across
algumas com 3 ou 4 palavras. Também há palavras com'
likedon't
e isso torna as coisas mais complicadas no sistema regex do Notepad ++ . O sistema de regex do Notepad ++ também é bastante irritante e limitado, portanto a solução é usar o regex em python (ou outra linguagem) ou criar expressões regulares específicas do formato para o Notepad ++.Aqui está uma maneira de fazer o trabalho: isso substituirá todas as palavras duplicadas, mesmo que não sejam contíguas:
(?:^|\G)(\b\w+\b),?(?=.*\1)
LEAVE EMPTY
. matches newline
Explicação:
Dada uma entrada como:
dangerous,dangerous,hazardous,perilous,dangerous,dangerous,hazardous,perilous
Obtemos:
fonte