如何使用正则表达式和Notepad++删除所有非ASCII字符?

181

我搜索了很多地方,但没有写明如何从Notepad ++中删除非ASCII字符的方法。

我需要知道在查找和替换中要写什么命令(有图片会很好)。

  • 如果我想要创建白名单并将所有ASCII单词/行标记为书签,使非ASCII行未标记

  • 如果该文件很大,无法选择所有ASCII行,并且只想选择包含非ASCII字符的行...

10个回答

335

这个表达式将搜索非ASCII值:

[^\x00-\x7F]+

勾选 “搜索模式 = 正则表达式”,然后单击 查找下一个

来源:Regex any ASCII character


5
请将英语翻译为中文。只返回已翻译的文本:并且以防不明显,如果您删除 "^",则正在搜索 ASCII 行 - Mike M
11
工作良好,但我不得不将“编码->以ANSI编码”设置为才能正常使用。否则我找不到其他解决办法。 - FoamyGuy
1
在NetBeans中使用其正则表达式搜索选项(星号按钮)完美运行。 - Teson
在VS-Code中工作时,不要忘记点击正则表达式搜索选项! - yashhy
8
如果你想保留\r和\n——回车符和换行符——你可以使用这个正则表达式:[\x00-\x09\x0B-\x0C\x0E-\x1F]+ - Steffen Winkler
显示剩余2条评论

70
在Notepad++中,如果您转到菜单搜索→ 查找范围内的字符→ 非ASCII字符(128-255),然后就可以逐个遍历每个非ASCII字符。
请务必选中“环绕”,以便循环遍历整篇文档中的所有非ASCII字符。

screenshot "Find in Range"

当你按下 "查找" 按钮时,它会选中该字符。然后进入“编辑”菜单并选择“替换”,此时“查找”框将被当前选择填充,即为所找到的字符。

然后您可以在正常的对话框中完成剩余的查找/替换操作。


5
这个功能可以正常工作,但是不能将全部结果列在列表中,并且也没有“替换”的选项。 - Alex
2
很好...因为我总是忘记非ASCII的正则表达式,每次都要谷歌一下回到这个页面 :) - Jean-Francois T.
1
所以这个技巧就是当你在这里按下查找时,它会选择字符。然后你只需转到编辑菜单并选择替换,Notepad++总是将“查找”框填充为当前选择,这将是你找到的字符。因此,您可以在正常对话框中完成其余的查找/替换操作。 - Jason C

32

除了ProGM的回答外,如果您看到像NUL或ACK这样的方框字符并希望将它们去掉,那么这些是ASCII控制字符(0到31),您可以使用以下表达式找到它们并删除:

[\x00-\x1F]+
为了移除所有的非ASCII和ASCII控制字符,您应该移除与这个正则表达式匹配的所有字符:
[^\x1F-\x7F]+

\x00\x1F 的值已经被 ProGM 匹配在答案中。 - Unihedron
2
它们被匹配为您想要保留的值。我只是建议这样做,以防您想要摆脱它们。 - brunorey
最后一个示例应该从20开始,以排除单元分隔符字符。也许还应该排除7F,因为它也是控制字符。 - fgb
太棒了!我使用qdap R包中的以下代码将所有讨厌的非ASCII字符删除:mgsub("[^\x1F-\x7F]+", "", text_vector, fixed = FALSE) - Pablo Adames

30

想要移除所有非ASCII字符,您可以使用以下替换:[^\x00-\x7F]+

Removing non-ASCII

如果您想要突出显示字符,我建议在搜索窗口中使用标记功能:这将突出显示非ASCII字符并在包含其中一个字符的行上放置书签。

如果您想要突出显示和在ASCII字符上放置书签,您可以使用正则表达式[\x00-\x7F]来实现。

Highlighting Non-ASCII

祝福


3
如果您想复制粘贴搜索表达式 [^\x00-\x7F]+。 - hyena
4
如果您想保留\r和\n——回车符和换行符——您可以使用此正则表达式:[\x00-\x09\x0B-\x0C\x0E-\x1F]+ - Steffen Winkler

4

保留换行:

  1. 首先选择一个用于换行的字符...我使用了#。
  2. 选择替换选项,扩展。
  3. 输入\n替换为#
  4. 点击替换全部

接下来:

  1. 选择替换选项正则表达式。
  2. 输入:[^\x20-\x7E]+
  3. 保持替换为空
  4. 点击替换全部

现在,选择替换选项扩展并将#替换为\n

:) 现在,您拥有一个干净的ASCII文件 ;)


3

另一种方法是...

  1. 如果你还没有安装Text FX插件,请先安装它。
  2. 点击TextFX菜单选项 -> zap all non printable characters to #。它将用3个#符号替换所有无效字符。
  3. 进入“查找/替换”并查找###。将其替换为空格。

如果你不记得正则表达式或者不想查找,这是一个不错的方法。但其他人提到的正则表达式也是一种好的解决方案。


将所有字符替换为###,这将替换所有类型的标点符号。我期望的解决方案是: 用“”替换“&”。 用'.'替换'&'。 等等。 - Kasim Husaini
它工作得很好,但是该工具将有趣的字符替换为一个#字符而不是三个,请注意。 - Raghav
1
文本 FX 插件已被弃用,甚至可能不再易于获取。请参见 TextFX's Future - "当列表足够长时,告别为社区服务良久的老旧工具将变得切实可行。" - Peter Mortensen
该名称现在已被Google劫持(2023)。 - Peter Mortensen

3

另一个好的技巧是进入您的编辑器的UTF8模式,这样您就可以实际看到这些有趣的字符并自己删除它们。


0
除了Steffen Winkler之外:
[\x00-\x08\x0B-\x0C\x0E-\x1F]+

忽略 \r \n 和 \t(回车、换行符、制表符

0
在Snowflake数据库中显示了非ASCII字符。
从表中选择列名 其中REGEXP_LIKE(column_name,'.[^[:ascii:]].');

问题是关于Notepad++的。 - undefined
1
根据目前的写法,你的回答不够清晰。请编辑以添加更多细节,以帮助其他人理解这如何回答所提出的问题。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - undefined

0

点击“查看/显示符号/显示所有字符” - 显示文件中的[SOH]字符 在文件中点击[SOH]符号 CTRL=H 弹出替换窗口 将“查找内容:”保持不变 将“替换为:”更改为您选择的字符(逗号、分号、其他...) 点击“全部替换” 完成!


你真的想对所有非 ASCII 字符都这样做吗?它们有成千上万个! - Toto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接