Como remover todas as palavras duplicadas em todas as linhas usando o Notepad ++?

9

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

Eu quero dizer ao Notepad ++ que eu quero remover todas as palavras duplicadas por linha. Para este exemplo, dangerous, seria removido:

dangerous,hazardous,perilous

Eu tenho um monte de linhas como essa e é por isso que estou procurando uma maneira automatizada de fazer isso.

    
por Gabriel 26.07.2012 / 20:53

2 respostas

8

Você pode usar uma expressão regular para remover palavras duplicadas consecutivas em uma linha, mas não é possível remover palavras duplicadas que não sejam consecutivas (por exemplo, dangerous, hazardous, dangerous ).

Use esta regex na janela de substituição do Notepad ++ e não se esqueça de selecionar "Regular expression" como a opção Search Mode abaixo:

Este regex removerá todas as palavras duplicadas consecutivas - seja 2 palavras duplicadas ou 10 palavras duplicadas consecutivamente: \b(\w+)(?:,\s+\b)+ .

A mesma expressão sem vírgulas seria: \b(\w+)(?:\s+\b)+ (pode ser útil para outros usuários).

Se você quer um regex especificamente para apenas duas palavras duplicadas (duplas), use este regex: (\b\w+\b)\W+ .

Coloque este regex na caixa Substituir por para manter uma ocorrência da palavra (caso contrário, todas as palavras repetidas serão removidas): ${1} .

Essas expressões regulares corrigirão uma situação como a que você descreveu na sua pergunta como exemplo. O primeiro regex funcionará para cada número de palavras duplicadas (por exemplo, dangerous, dangerous, dangerous, dangerous, hazardous ), enquanto a segunda versão funcionará apenas para duas palavras duplicadas (por exemplo, dangerous, dangerous, hazardous ).

Observação: a expressão regular só se aplicará ao formato descrito na pergunta, o que significa que formatos como two words, two words, anotherword , two-words, two-words, anotherword , three words expression, three words expression, anotherword não serão alterados porque a regex ganhou aplica-se a eles.

    
por 26.07.2012 / 22:03
0

Aqui está uma maneira de fazer o trabalho, isso substituirá todas as palavras duplicadas por evan se elas não forem contíguas:

  • Ctrl + H
  • Encontre o que: (?:^|\G)(\b\w+\b),?(?=.*)
  • Substituir por: LEAVE EMPTY
  • check Embrulhe
  • verificar expressão regular
  • NÃO VERIFIQUE . matches newline
  • Substituir todos

Explicação:

(?:^|\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
(?=.*)    : positive lookahead, check if thhere is the same word (contained in group 1) somewhere after

Dada uma entrada como:     dangerous,dangerous,hazardous,perilous,dangerous,dangerous,hazardous,perilous

Temos:

dangerous,hazardous,perilous
    
por 26.07.2018 / 15:04