Como faço para remover todos os caracteres não ASCII com regex e Notepad ++?

147

Pesquisei bastante, mas em nenhum lugar está escrito como remover caracteres não-ASCII do Notepad ++.

Eu preciso saber qual comando escrever em localizar e substituir (com imagem seria ótimo).

  • Se eu quiser criar uma lista branca e marcar todas as palavras / linhas ASCII para que as linhas não ASCII sejam desmarcadas

  • Se o arquivo for muito grande e não puder selecionar todas as linhas ASCII e apenas desejar selecionar as linhas que contêm caracteres não ASCII ...

Texh
fonte

Respostas:

263

Esta expressão procurará valores não ASCII:

[^\x00-\x7F]+

Marque 'Modo de pesquisa = expressão regular' e clique em Find Next.

Fonte: regex qualquer caractere ASCII

ProGM
fonte
4
e, caso isso não seja óbvio, se você remover o "^", você está pesquisando as linhas ASCII
Mike M
7
Funciona bem, mas eu tive que definir Encoding->Encode in ANSI. Não foi possível encontrar nada em contrário.
FoamyGuy
1
Funciona perfeitamente no netbeans com sua opção de pesquisa por regexp (botão asterix) #
807
funciona no código VS, não se esqueça de clicar na opção de pesquisa Regex!
yashhy
4
Se você deseja manter \ r e \ n - caracteres de retorno de carro e avanço de linha - pode usar este regex: [\ x00- \ x09 \ x0B- \ x0B- \ x0C \ x0E- \ x1F] +
Steffen Winkler
53

No Notepad ++, se você for ao menu PesquisarLocalizar caracteres no intervaloCaracteres não ASCII (128-255), poderá percorrer o documento para cada caractere não ASCII.

Marque a opção " Wrap around " se desejar fazer um loop no documento para todos os caracteres não ASCII.

captura de tela "Localizar no intervalo"

Anon Y. Mous
fonte
3
Isso funciona bem, mas não mostra todos os resultados em uma lista e não "substituir" opção
Alex
Neat ... porque eu sempre esqueço o regex para o não-ASCII e tem que Google-lo cada vez que voltar a esta página :)
Jean-François T.
27

Além da resposta do ProGM, caso você veja caracteres em caixas como NUL ou ACK e queira se livrar deles, esses são caracteres de controle ASCII (0 a 31), você pode encontrá-los com a seguinte expressão e removê-los:

[\x00-\x1F]+

Para remover todos os caracteres de controle não-ASCII e ASCII, você deve remover todos os caracteres correspondentes a este regex:

[^\x1F-\x7F]+
brunorey
fonte
Valores \x00e \x1Fjá são correspondidos na resposta pelo ProGM.
Unihedron
2
Eles correspondem aos valores que você deseja manter. Eu só estava sugerindo isso, caso você queira se livrar deles.
brunorey
O último exemplo deve começar às 20 para excluir o caractere separador de unidades. Talvez exclua 7F e também seja um personagem de controle.
Fb 21/01
Brilhante! Tirei todos os caracteres não-ASCII traquinas usando o pacote qdap R usando:mgsub("[^\x1F-\x7F]+", "", text_vector, fixed = FALSE)
Pablo Adames
22

Para remover todos os caracteres não ASCII, você pode usar a seguinte substituição: [^\x00-\x7F]+

Removendo não ASCII

Para realçar caracteres, recomendo usar a função Marcar na janela de pesquisa: isso destaca caracteres não ASCII e coloca um marcador nas linhas que contêm um deles

Se você deseja destacar e colocar um marcador nos caracteres ASCII, use a regex [\x00-\x7F]para fazer isso.

Destacando Não-ASCII

Felicidades

Jean-Francois T.
fonte
1
se você deseja copiar novamente a expressão de pesquisa [^ \ x00- \ x7F] +
hiena
2
Se você deseja manter \ r e \ n - caracteres de retorno de carro e avanço de linha - pode usar este regex: [\ x00- \ x09 \ x0B- \ x0B- \ x0C \ x0E- \ x1F] +
Steffen Winkler
4

Para manter novas linhas:

  1. Primeiro, selecione um caractere para a nova linha ... Eu usei #.
  2. Selecione a opção de substituição, estendida.
  3. entrada \ n substitua por #
  4. Hit Replace All

Próximo:

  1. Selecione Substituir opção Expressão regular.
  2. Insira isto: [^ \ x20- \ x7E]
  3. Mantenha substituir por vazio
  4. Hit Replace All

Agora, selecione a opção Substituir estendida e Substitua # por \ n

:) agora, você tem um arquivo ASCII limpo;)

TooGeeky
fonte
3

Outro bom truque é entrar no modo UTF8 no seu editor para poder ver esses personagens engraçados e excluí-los você mesmo.

Gidon Wise
fonte
1

Outra maneira ...

  1. Instale o plug-in Text FX se ainda não o tiver
  2. Vá para a opção de menu TextFX -> coloque zap todos os caracteres não imprimíveis em #. Ele substituirá todos os caracteres inválidos por símbolos 3 #
  3. Vá para Localizar / substituir e procure por ###. Substitua por um espaço.

Isso é bom se você não se lembra do regex ou não se importa em procurá-lo. Mas o regex mencionado por outros também é uma boa solução.

goku_da_master
fonte
Zapping todos os caracteres substitui todos os tipos de sinais de pontuação por ###. A solução que eu esperaria é: Substituir “e” com" Substituir 'e' com' etc...
Kasim Husaini
Funciona bem, no entanto, a ferramenta substitui caracteres engraçados por um # char e não três. por favor tome nota.
Raghav
1
O plug-in Text FX foi descontinuado e pode nem estar mais disponível. Veja, por exemplo, o futuro do TextFX - "Quando a lista crescer por tempo suficiente, será prático despedir-se de um cavalo de trabalho envelhecido que serviu bem a comunidade".
Peter Mortensen