Как удалить все строки, содержащие символы, не входящие в набор ASCII, с помощью Notepad++ или Emeditor

Как удалить все строки, содержащие символы, не входящие в набор ASCII, с помощью Notepad++ или Emeditor

Как удалить все строки, содержащие символы клавиатуры, не входящие в набор ASCII?

Я пробовал так много раз коды регулярных выражений, но ни один не работает так, как должен. Я даже пробовал этот код, [^\x00-\x7F]+но он не выбрал все символы.

Мне в голову пришла идея использовать этот способ [^a-z0-9``~!@#$%^&*()-_=+[]{}\|;:'"<>,./?], но он все равно не работает, потому что некоторые из этих персонажей не были отменены, например\ / | { } [ ] $ # ^ ( )

  1. Если строка содержит символы, которых нет в списке ниже, я хочу удалить ее или добавить в закладки.

    0123456789`~!@#$%^&*()-_=+[]{}\/|;:'"<>,.?
    abcdefghijklmnopqrstuvwxyz
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    
  2. Простой пример: здесь можно найти еще больше подобных персонажей:https://en.wikipedia.org/wiki/Список_символов_Юникода

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

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

решение1

[^\x00-\x7F]работает отлично, но если вы хотите использовать длинный класс символов, [^a-z0-9``~!@#$%^&*()-_=+[]{}\|;:'"<>,./?]вам придется экранировать символы, имеющие особое значение (например, -[]\и добавлять перенос строки \r, \n.

Ваше регулярное выражение становится следующим:

 [^a-z0-9``~!@#$%^&*()\-_=+\[\]{}\\|;:'"<>,./?\r\n]
 #                    ^    ^ ^   ^            ^^^^

  • Ctrl+H
  • Найти то, что: [^a-z0-9``~!@#$%^&*()\-_=+\[\]{}\\|;:'"<>,./?\r\n]+$ Но, опять же, [^\x00-\x7F]работает отлично и более читабельно
  • Заменить:LEAVE EMPTY
  • проверить Обернуть вокруг
  • проверить Регулярное выражение
  • Replace all

Результат для данного примера:

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

решение2

Если вы не уверены в решении и не привязаны к Notepad++, вы можете установить bash для Win 10, как я показал здесьhttps://superuser.com/a/1252271/715210(извините, я всегда возвращаюсь к вашим вопросам с обходными путями Linux ;) )

У меня есть решение, при котором вы, к сожалению, также потеряете апостроф.'

  1. открыть bash для Windows через меню «Пуск»
  2. Перейдите в папку, где находится ваш файл cd /mnt/c/path/folder(диск C: находится в /mnt/c)
  3. Если ваш файл называетсяфу.txt Вы могли бы создать файлбар.txtс помощью этой команды:

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

Объяснение частей:

cat foo.txtвыводит текстовый файл и с помощью конвейера |вывод перенаправляется в команду tr -cd, которая удаляет все символы, которых нет в списке после '...'. Followed by a pipe tosed to remove the empty lines. Last but not least with> bar.txt` мы перенаправляем вывод в файлбар.txt

Благодаря:

решение3

В Notepad++ это просто:

  1. менюПоиск>Отметка...

  2. Найти что: [^\x00-\x7F]
    ☑ Отметить строку
    (•) Регулярное выражение

  3. НажиматьНайти все

  4. менюПоиск>Закладка>Удалить отмеченные строки

Связанный контент