如何删除所有包含非 ASCII 键盘字符的行?
我尝试了很多次正则表达式代码,但没有一个能正常工作,我甚至尝试了这个代码[^\x00-\x7F]+
,但它没有选择所有的字符
我想到的是使用这种方式[^a-z0-9``~!@#$%^&*()-_=+[]{}\|;:'"<>,./?]
,但仍然不起作用,因为其中一些字符没有被取消选择,例如\
/
|
{
}
[
]
$
#
^
(
)
如果某一行包含以下列表中没有的字符,我想将其删除或添加为书签
0123456789`~!@#$%^&*()-_=+[]{}\/|;:'"<>,.? abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
简单示例:在这里可以找到更多类似的字符:https://en.wikipedia.org/wiki/List_of_Unicode_characters
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++,你可以安装适用于 Win 10 的 bash,正如我在此处展示的那样https://superuser.com/a/1252271/715210(抱歉,我总是用 Linux 解决方法来回答你的问题 ;))
我有一个解决方案,不幸的是你也会丢失撇号'
- 通过开始菜单打开 Windows 版 bash
- 转到文件所在的文件夹
cd /mnt/c/path/folder
(驱动器 C: 位于 /mnt/c) 如果您的文件名为foo.txt 你可以生成一个文件酒吧.txt使用以下命令:
cat foo.txt | tr -cd '[:alnum:]\n\r~!@#$%^&*()-_=+{}\|;:<>,./?"`' | sed '/^$/d' > bar.txt
各部分解释:
cat foo.txt
输出文本文件,然后通过管道|
将输出重定向到命令,该命令将删除sed > bar.txttr -cd
之后列表中不存在的每个字符,我们将输出重定向到文件'...'. Followed by a pipe to
to remove the empty lines. Last but not least with
酒吧.txt
谢谢:
答案3
在 Notepad++ 中这很容易:
菜单搜索>标记...
查找内容:
[^\x00-\x7F]
☑ 标记线
(•) 正则表达式按找到所有
菜单搜索>书签>删除书签行