Exportar todas as correspondências de expressão regular no Textpad ou Notepad ++ como uma lista

28

No Textpad ou no Notepad ++, existe uma opção para exportar todas as correspondências para uma localização de expressão regular, como uma única lista?

Em um grande arquivo de texto, estou procurando tags (palavras entre%%), usando expressão regular %\< and \>%, e quero todas as correspondências como uma única lista, para que eu possa remover duplicatas usando o Excel e obter uma lista de tags exclusivas.

Kiranshell
fonte
Se você usar o plug-in RegexExtract para o Notepad ++, ele poderá remover duplicatas e não haverá necessidade de pós-processamento com o Excel.
R. Schreurs

Respostas:

53

Você pode conseguir isso usando as referências anteriores e as funcionalidades Localizar e Marcar no Notepad ++.

  1. Encontre as correspondências usando regex (digamos %(.*?)%) e substitua-as por \n%\1%\n; depois disso, teremos nossa palavra-alvo em linhas separadas (ou seja, nenhuma linha terá mais de uma palavra correspondente)

  2. Use a funcionalidade Pesquisar -> Localizar -> Marcar para marcar cada linha com regex %(.*?)%e lembre-se de marcar ' Linha de Marcador ' antes de marcar o texto

  3. Selecione Pesquisar -> Favorito -> Remover linhas não marcadas
  4. Salve o texto restante. É a lista necessária.
Ankit
fonte
Eu tenho mais um arquivo com <> como tags em vez de%%, tentei com <(. *?)> E \ n <\ 1> \ n, mas não está funcionando, por favor ajude.
precisa saber é o seguinte
de nada :) Para mim, está trabalhando para <> também. Existem aninhados <>? Você poderia elaborar o que exatamente 'não está funcionando'?
Ankit
Estou tentando fazer uma lista de tags como antes, mas estas já possuem <>, estou usando <(. *?)> Em vez de% (. *?)% E \ n <\ 1> \ n em vez de \ n % \ 1% \ n, este é o link para um arquivo de amostra wikisend.com/download/158050/tags.txt
Kiranshell
Tentei novamente com o texto fornecido e usando <(. *?)>, Está funcionando normalmente. Eu tenho a lista de marcas <Supplies> <hostname> ..... e assim por diante
Ankit
Mencione o erro / problema exato que você está tendo. Pode parecer bobagem, mas lembre-se de mover o cursor para top.I costumam fazer esse erro e busca não retornou resultado ... :)
Ankit
5

Fazer isso no Notepad ++ é um requisito obrigatório? Você está no Windows ou em alguma forma de Unix? Se você estiver no Windows, poderá fazê-lo (parcialmente) no prompt de comando:

findstr / r "% [az]. * [az] %% [az]%" seu_arquivo > novo_arquivo

findstré vagamente inspirado por grep, portanto, esse novo_arquivo conterá todas as linhas correspondentes aos seus critérios de pesquisa; você pode usar o Notepad ++ para remover o texto indesejado (à esquerda do primeiro% e à direita do segundo).


E, é claro, se você estiver no Unix, poderá executar a tarefa equivalente sed.

Scott
fonte
de longe a melhor resposta!
Charles-Antoine Fournel
2

Existe um plug-in do Notepad ++ que pode copiar a expressão regex correspondente para o novo arquivo na nova guia. RegexExtract

Como não encontrei nenhum plug-in para o Notepad ++ que possa extrair algum texto do documento atual ou todos os arquivos de um local com algumas configurações adicionais (como conversão de caso), decidi tentar fazer isso sozinho. (...) A interface do plug-in é bem direta (...). (...) Os campos "Localizar", "Substituir" e "Máscara" usam a sintaxe de regex C ++ 11. A extração de arquivos funciona agora apenas para aqueles em UTF8.

Entrada da caixa de diálogo Editar personalizada para a pergunta

insira a descrição da imagem aqui

Na imagem, você pode ver como preencher a caixa de diálogo. Suponho que uma palavra não contenha espaços, etc., apenas caracteres correspondidos por \ w. Notavelmente:

  • Use um par de colchetes, para permitir a seleção da palavra, sem os caracteres de faixa.
  • Escolha a opção Extrair com substituir , para selecionar a primeira correspondência. Caso contrário, você obterá uma saída colunar de todos os $ 1, $ 2 etc.
  • Marque Ignorar $ & ... para excluir as correspondências completas.
  • Marque Filtrar exclusivo para relatar cada partida apenas uma vez.
  • Clique em Extrair para selecionar obter resultados. (A pesquisa encontra apenas as correspondências, mas não informa).
Greck
fonte
Bom plug-in, faz exatamente o que foi solicitado.
R. Schreurs
Parece não funcionar com o Notepad ++ de 64 bits
Ivan Chau
0

No TextPad, você abriria a Findcaixa como de costume e usaria o Mark Allbotão

A partir daí, use a Copy Bookmarked Linesfunção (Menu Editar> Copiar outro> Linhas marcadas.)

daveloyall
fonte
Pessoalmente, faço essa operação exata com tanta frequência que configurei um atalho de teclado para a função Copiar Linhas Marcadas: Ctrl + Alt + c.
daveloyall
Eu vim para esta pergunta porque estava procurando pela pergunta do Notepad ++. Depois de muitos anos como um usuário fiel e impagável do Textpad, estou mudando para o Notepad ++ (GPL).
daveloyall