Como remover todas as linhas contendo caracteres não-ASCII usando o Notepad ++ ou Emeditor

2

Como removo todas as linhas que contêm caracteres de teclado não ASCII?

Eu tentei muitas vezes códigos de expressões regulares, mas nenhum funciona como deveria Eu até tentei esse código [^\x00-\x7F]+ mas ele não selecionou todos os caracteres

a ideia que tenho em mente é usar dessa forma [^a-z0-9''~!@#$%^&*()-_=+[]{}\|;:'"<>,./?] , mas ainda não funciona porque alguns desses caracteres não foram desmarcados como \ / | { } [ ] $ # ^ ( )

  1. Se uma linha contiver algum caractere que não esteja na lista abaixo, desejo removê-lo ou marcá-lo como favorito

    0123456789'~!@#$%^&*()-_=+[]{}\/|;:'"<>,.?
    abcdefghijklmnopqrstuvwxyz
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    
  2. Exemplo simples: há mais caracteres como este encontrados aqui: link

    0123456789'~!@#$%^&*()-_=+[]{}\|;:'"<>,./?
    abcdefghijklmnopqrstuvwxyz
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    ¤©ª«¬¯°±²³´µ¶·¸¹º»¼½¾¿÷ÆIJŒœƔƕƋƕ
    ƜƝƢƸƾDžNJNjǽǾǼɁɀȾɎʒəɼʰʲʱʴʳʵʶʷʸˁˀˇˆ˟ˠ
    ˩˧Ͱͱͳʹͼͻͺ͵ͿΏΔΘΞΛΣΠΦΧΨΩΪΫάέήίΰαβδε
    θηκλμξπςρφχψωϊϋϏώϑϐϓϒϔϕϖϠϟϞϝϜϡϢ
    ϤϣϧϫϬϮϯϰϱ₠₡₢₣₤₥₦₧₨₩₪₫€₭₮₯₰₱₲
    ₳₴₵₶₷₸₹₺₻₼₽₾₿⅐⅑⅒⅓⅔⅕⅖⅗⅘⅙⅚⅛⅜
    ⅝⅞⅟℠℡™℣ℤ℥Ω℧ℨ℩KÅℬℭ℮ℯ⇀⇁ↀↁↂↃↄ
    ⇔⇕⇖⇗⇘⇙⇚⇛⇜⇝⇞⇟⇠⇡⇢⇣⇤⇥⇦⇧⇨⅀⅁⅂⅃⅄ⅅ
    ⅆⅇⅈⅉ⅊⅋⅌⅍ⅎ⅏ⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻⅼⅽ
    
  3. Resultado esperado:

    0123456789'~!@#$%^&*()-_=+[]{}\|;:'"<>,./?
    abcdefghijklmnopqrstuvwxyz
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    
por DeathRival 27.09.2017 / 19:32

3 respostas

2

[^\x00-\x7F] funciona bem, mas, se você quiser usar uma classe de caractere longa como [^a-z0-9''~!@#$%^&*()-_=+[]{}\|;:'"<>,./?] , é necessário escapar de caracteres que tenham um significado especial (por exemplo, -[]\ e adicionar linebreak \r , \n .

Seu regex se torna:

 [^a-z0-9''~!@#$%^&*()\-_=+\[\]{}\|;:'"<>,./?\r\n]
 #                    ^    ^ ^   ^            ^^^^
  • Ctrl + H
  • Encontre o que: [^a-z0-9''~!@#$%^&*()\-_=+\[\]{}\|;:'"<>,./?\r\n]+$ Mas, novamente, [^\x00-\x7F] funciona bem e é mais legível
  • Substituir por: LEAVE EMPTY
  • check Embrulhe
  • verificar expressão regular
  • Substituir todos

Resultado para o exemplo dado:

0123456789'~!@#$%^&*()-_=+[]{}\|;:'"<>,./?
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
    
por 01.10.2017 / 11:47
0

Se você é agnóstico para a solução e não está fixado no Notepad ++, você pode instalar o bash para o Win 10, como mostrei aqui link (desculpe sempre volto para suas perguntas com soluções Linux;))

Eu teria uma solução, onde você infelizmente também perderá o apóstrofo '

  1. abra o bash para o Windows no menu Iniciar
  2. Vá para a pasta em que seu arquivo está localizado com cd /mnt/c/path/folder (a unidade C: está em / mnt / c)
  3. Se o seu arquivo é chamado foo.txt você pode gerar um arquivo bar.txt com este comando:

    cat foo.txt | tr -cd '[:alnum:]\n\r~!@#$%^&*()-_=+{}\|;:<>,./?"'' | sed '/^$/d' > bar.txt

Explicação das partes:

cat foo.txt exibe o arquivo de texto e, com o canal | , a saída é redirecionada para o comando tr -cd , que remove todos os caracteres, que não estão na lista após betwenn '...'. Followed by a pipe to sed to remove the empty lines. Last but not least with > bar.txt 'redirecionamos a saída para o arquivo bar.txt

Obrigado a:

  • link para o: alnum: tip
  • link para a explicação de apóstrofo
por 28.09.2017 / 00:41
0

No Notepad ++, isso é fácil:

  1. menu Pesquisar > Marcar ...

  2. Encontre o que: [^\x00-\x7F]
    ☑ Marcar linha
    (•) Expressão regular

  3. Pressione Encontrar todos

  4. menu Pesquisar > Bookmark > Remover linhas marcadas

por 30.09.2017 / 08:16