Como removo todas as linhas que contêm caracteres de teclado não ASCII?
Eu tentei tantas vezes códigos de expressões regulares, mas nenhum funcionou como deveria. Eu até tentei esse código, [^\x00-\x7F]+
mas ele não selecionou todos os caracteres
a ideia que me veio à cabeça é usar desta forma, [^a-z0-9``~!@#$%^&*()-_=+[]{}\|;:'"<>,./?]
mas ainda não funcionou porque alguns desses personagens não foram desmarcados como\
/
|
{
}
[
]
$
#
^
(
)
Se uma linha contiver algum caractere que não esteja na lista abaixo, desejo removê-lo ou marcá-lo
0123456789`~!@#$%^&*()-_=+[]{}\/|;:'"<>,.? abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
Exemplo simples: Existem mais caracteres como este encontrados aqui:https://en.wikipedia.org/wiki/List_of_Unicode_characters
0123456789`~!@#$%^&*()-_=+[]{}\|;:'"<>,./? abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ ¤©ª«¬¯°±²³´µ¶·¸¹º»¼½¾¿÷ÆIJŒœƔƕƋƕ ƜƝƢƸƾDžNJNjǽǾǼɁɀȾɎʒəɼʰʲʱʴʳʵʶʷʸˁˀˇˆ˟ˠ ˩˧Ͱͱͳʹͼͻͺ͵ͿΏΔΘΞΛΣΠΦΧΨΩΪΫάέήίΰαβδε θηκλμξπςρφχψωϊϋϏώϑϐϓϒϔϕϖϠϟϞϝϜϡϢ ϤϣϧϫϬϮϯϰϱ₠₡₢₣₤₥₦₧₨₩₪₫€₭₮₯₰₱₲ ₳₴₵₶₷₸₹₺₻₼₽₾₿⅐⅑⅒⅓⅔⅕⅖⅗⅘⅙⅚⅛⅜ ⅝⅞⅟℠℡™℣ℤ℥Ω℧ℨ℩KÅℬℭ℮ℯ⇀⇁ↀↁↂↃↄ ⇔⇕⇖⇗⇘⇙⇚⇛⇜⇝⇞⇟⇠⇡⇢⇣⇤⇥⇦⇧⇨⅀⅁⅂⅃⅄ⅅ ⅆⅇⅈⅉ⅊⅋⅌⅍ⅎ⅏ⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻⅼⅽ
Resultado esperado:
0123456789`~!@#$%^&*()-_=+[]{}\|;:'"<>,./? abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
Responder1
[^\x00-\x7F]
funciona bem, mas, se você quiser usar uma classe de caracteres longa, [^a-z0-9``~!@#$%^&*()-_=+[]{}\|;:'"<>,./?]
precisará escapar de caracteres que tenham um significado especial (ou seja, -[]\
e adicionar linebreak \r
, \n
.
Seu regex se torna:
[^a-z0-9``~!@#$%^&*()\-_=+\[\]{}\\|;:'"<>,./?\r\n]
# ^ ^ ^ ^ ^^^^
- Ctrl+H
- Descubra o que:
[^a-z0-9``~!@#$%^&*()\-_=+\[\]{}\\|;:'"<>,./?\r\n]+$
mas, novamente,[^\x00-\x7F]
funciona bem e é mais legível - Substituir com:
LEAVE EMPTY
- confira Envolver
- verifique expressão regular
- Replace all
Resultado para determinado exemplo:
0123456789`~!@#$%^&*()-_=+[]{}\|;:'"<>,./?
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Responder2
Se você é agnóstico quanto à solução e não está fixo no Notepad ++, você pode instalar o bash para Win 10, como mostrei aquihttps://superuser.com/a/1252271/715210(desculpe, sempre volto às suas perguntas com soluções alternativas para Linux;))
Eu teria uma solução, onde infelizmente você também perderá o apóstrofo'
- abra o bash para Windows no menu iniciar
- Vá para a pasta onde seu arquivo está localizado
cd /mnt/c/path/folder
(a unidade C: está em /mnt/c) Se o seu arquivo tiver o nomefoo.txt você poderia gerar um arquivobarra.txtcom este comando:
cat foo.txt | tr -cd '[:alnum:]\n\r~!@#$%^&*()-_=+{}\|;:<>,./?"`' | sed '/^$/d' > bar.txt
Explicação das peças:
cat foo.txt
gera o arquivo de texto e com o pipe |
a saída é redirecionada para o comando tr -cd
que remove todos os caracteres, que não estão na lista após entre '...'. Followed by a pipe to
sed to remove the empty lines. Last but not least with
> bar.txt` redirecionamos a saída para o arquivobarra.txt
Graças a:
- https://stackoverflow.com/a/20007549/7311363para :alnum: dica
- https://unix.stackexchange.com/a/48568/223965para a explicação do apóstrofo
Responder3
No Notepad++ isso é fácil:
cardápioProcurar>Marca...
Descubra o que:
[^\x00-\x7F]
☑ Marcar linha
(•) Expressão regularImprensaEncontrar tudo
cardápioProcurar>marca páginas>Remover linhas marcadas