Как удалить все строки, содержащие символы клавиатуры, не входящие в набор ASCII?
Я пробовал так много раз коды регулярных выражений, но ни один не работает так, как должен. Я даже пробовал этот код, [^\x00-\x7F]+
но он не выбрал все символы.
Мне в голову пришла идея использовать этот способ [^a-z0-9``~!@#$%^&*()-_=+[]{}\|;:'"<>,./?]
, но он все равно не работает, потому что некоторые из этих персонажей не были отменены, например\
/
|
{
}
[
]
$
#
^
(
)
Если строка содержит символы, которых нет в списке ниже, я хочу удалить ее или добавить в закладки.
0123456789`~!@#$%^&*()-_=+[]{}\/|;:'"<>,.? abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
Простой пример: здесь можно найти еще больше подобных персонажей:https://en.wikipedia.org/wiki/Список_символов_Юникода
0123456789`~!@#$%^&*()-_=+[]{}\|;:'"<>,./? abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ ¤©ª«¬¯°±²³´µ¶·¸¹º»¼½¾¿÷ÆIJŒœƔƕƋƕ ƜƝƢƸƾDžNJNjǽǾǼɁɀȾɎʒəɼʰʲʱʴʳʵʶʷʸˁˀˇˆ˟ˠ ˩˧Ͱͱͳʹͼͻͺ͵ͿΏΔΘΞΛΣΠΦΧΨΩΪΫάέήίΰαβδε θηκλμξπςρφχψωϊϋϏώϑϐϓϒϔϕϖϠϟϞϝϜϡϢ ϤϣϧϫϬϮϯϰϱ₠₡₢₣₤₥₦₧₨₩₪₫€₭₮₯₰₱₲ ₳₴₵₶₷₸₹₺₻₼₽₾₿⅐⅑⅒⅓⅔⅕⅖⅗⅘⅙⅚⅛⅜ ⅝⅞⅟℠℡™℣ℤ℥Ω℧ℨ℩KÅℬℭ℮ℯ⇀⇁ↀↁↂↃↄ ⇔⇕⇖⇗⇘⇙⇚⇛⇜⇝⇞⇟⇠⇡⇢⇣⇤⇥⇦⇧⇨⅀⅁⅂⅃⅄ⅅ ⅆⅇⅈⅉ⅊⅋⅌⅍ⅎ⅏ⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻⅼⅽ
Ожидаемый результат:
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 ;) )
У меня есть решение, при котором вы, к сожалению, также потеряете апостроф.'
- открыть bash для Windows через меню «Пуск»
- Перейдите в папку, где находится ваш файл
cd /mnt/c/path/folder
(диск C: находится в /mnt/c) Если ваш файл называетсяфу.txt Вы могли бы создать файлбар.txtс помощью этой команды:
cat foo.txt | tr -cd '[:alnum:]\n\r~!@#$%^&*()-_=+{}\|;:<>,./?"`' | sed '/^$/d' > bar.txt
Объяснение частей:
cat foo.txt
выводит текстовый файл и с помощью конвейера |
вывод перенаправляется в команду tr -cd
, которая удаляет все символы, которых нет в списке после '...'. Followed by a pipe to
sed to remove the empty lines. Last but not least with
> bar.txt` мы перенаправляем вывод в файлбар.txt
Благодаря:
- https://stackoverflow.com/a/20007549/7311363для :alnum: совета
- https://unix.stackexchange.com/a/48568/223965для объяснения апострофа
решение3
В Notepad++ это просто:
менюПоиск>Отметка...
Найти что:
[^\x00-\x7F]
☑ Отметить строку
(•) Регулярное выражениеНажиматьНайти все
менюПоиск>Закладка>Удалить отмеченные строки