Substitua as linhas idênticas por apenas uma linha no final no Notepad ++

3

Posso substituir linhas idênticas por apenas uma linha no final no Notepad ++? Por exemplo. de:

1st January 2013
//some text1
1st January 2013
//some text2
1st January 2013
//some text3
1st January 2013

para:

//some text1
//some text2
//some text3
1st January 2013

Também é possível, se eu tiver todas as datas de 1 a 30 ou 31, para substituí-las individualmente em sua última aparição?

    
por astroboy 29.04.2013 / 19:45

3 respostas

5

Você pode usar essa regex na caixa de diálogo Pesquisar e substituir:

^(.*?)$\s+?^(?=.*^$)

e substitua por nada.

Você precisa verificar as opções "Expressão regular" e ". corresponde à nova linha":

Explicação de regex:

^ corresponde ao início da linha

(.*?) corresponde a todos os caracteres 0 ou mais o menor número possível. A linha correspondente é armazenada por causa dos colchetes ao redor e acessível usando

$ corresponde ao final da linha

\s+?^ esta parte combina todos os caracteres em branco (novas linhas!) até o próximo Início da linha == > Isso remove as novas linhas

(?=.*^$) esta é uma afirmação positiva antecipada. Esta é a parte importante neste regex, uma linha é apenas correspondida (e removida), quando há exatamente a mesma linha seguinte em algum outro lugar no arquivo.

    
por 30.04.2013 / 08:20
1

Você pode conseguir este Sublime Text 2 (ou qualquer editor com suporte completo a regex - NOT Notepad ++, infelizmente) com regex find & substituir.

Encontrar:

^(([^\n]+\n)*)([^\n]+)\n(([^\n]+\n)*)(\n.*)*$

Substituir:


Continue clicando em "substituir" até que linhas duplicadas tenham sido removidas do documento. "Replace All" não funcionará aqui (ou você terá que pressioná-lo várias vezes).

Encontrou uma solução mais simples que funciona para o Notepad ++, assim como para outros editores. Encontre com o modo de expressão regular e desative ". Corresponde à nova linha":

^(.*)$\s+(?=(^.*$\s+)*)

E substitua por nada. Isso é baseado na resposta do @ stema abaixo, mas funciona mesmo quando as linhas correspondentes são substrings das seguintes linhas:

1st January 2013
//some text1
1st January 2013
//some text2
1st January 2013
//some text3
21st January 2013

Devem retornar corretamente

//some text1
//some text2
1st January 2013
//some text3
21st January 2013
    
por 29.04.2013 / 21:45
0

A varredura de linhas duplicadas é, até onde eu sei, impossível no Notepad ++ sem nenhum plug-in, embora você possa tornar um esforço manual muito mais fácil se as duplicatas tiverem um formato conhecido. Por exemplo, datas formatadas como '3 de fevereiro de 2012' podem ser facilmente encontradas (e substituídas por strings vazias) por correspondência com a expressão regular ^\d+[snrt][tdh] [A-Z][a-z]* 20\d\d$ .

Como esta resposta faz um ótimo trabalho ao explicar, o plug-in O TextFX é particularmente útil para esses procedimentos por meio de sua capacidade de classificar linhas temporariamente.

    
por 29.04.2013 / 20:29

Tags