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

Posted

技术标签:

【中文标题】如何使用正则表达式和 Notepad++ 删除所有非 ASCII 字符?【英文标题】:How do I remove all non-ASCII characters with regex and Notepad++? 【发布时间】:2014-01-20 07:36:27 【问题描述】:

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

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

如果我想创建一个白名单并为所有 ASCII 单词/行添加书签,那么非 ASCII 行将被取消标记

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

真的想对ALL非ASCII字符这样做吗?他们是数千人!【参考方案2】:

在 Notepad++ 中,如果您转到菜单 搜索查找范围内的字符非 ASCII 字符 (128-255) 您可以然后单步执行文档到每个非 ASCII 字符。

如果您想在文档中循环查找所有非 ASCII 字符,请务必勾选“Wrap around”。

【讨论】:

这很好用,但不会在列表中显示所有结果并且没有“替换”选项 整洁...因为我总是忘记非 ASCII 的正则表达式并且每次都必须谷歌它才能返回此页面:) 所以诀窍是当你在这里按 find 时,它会选择角色。然后您只需转到“编辑”菜单并选择“替换”,Notepad++ 总是用当前选择填充“查找”框,这将是您找到的字符。所以你可以在普通对话框中完成其余的查找/替换。【参考方案3】:

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

要突出显示字符,我建议在搜索窗口中使用 Mark 功能:这会突出显示非 ASCII 字符并在包含其中一个字符的行中放置一个书签

如果您想在 ASCII 字符上突出显示并添加书签,您可以使用正则表达式 [\x00-\x7F] 来执行此操作。

干杯

【讨论】:

如果要复制粘贴搜索表达式 [^\x00-\x7F]+ 如果你想保留 \r 和 \n - 回车和换行字符 - 你可以使用这个正则表达式: [\x00-\x09\x0B-\x0C\x0E-\x1F]+ 【参考方案4】:

除了 ProGM 的回答之外,如果你在 NUL 或 ACK 之类的框中看到字符并想摆脱它们,那些是 ASCII 控制字符(0 到 31),你可以通过以下表达式找到它们并且删除它们:

[\x00-\x1F]+

为了删除所有非 ASCII AND ASCII 控制字符,您应该删除所有匹配此正则表达式的字符:

[^\x1F-\x7F]+

【讨论】:

来自 \x00\x1F 的值已经在 ProGM 的答案中匹配。 它们匹配为您想要保留的值。我只是建议您这样做,以防您想摆脱它们。 最后一个示例应该从 20 开始以排除单位分隔符。也许排除 7F 以及它也是一个控制字符。 太棒了!我使用 qdap R 包删除了所有讨厌的非 ASCII 字符:mgsub("[^\x1F-\x7F]+", "", text_vector, fixed = FALSE)【参考方案5】:

此表达式将搜索非 ASCII 值:

[^\x00-\x7F]+

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

来源:Regex any ASCII character

【讨论】:

如果不明显,如果您删除“^”,则您正在搜索 ASCII 行 效果很好,但我必须设置Encoding->Encode in ANSI。无法找到其他任何东西。 使用它的正则表达式搜索选项(asterix 按钮)在 netbeans 中完美运行 在 VS-Code 中工作,别忘了点击 Regex 搜索选项! 如果你想保留 \r 和 \n - 回车和换行字符 - 你可以使用这个正则表达式: [\x00-\x09\x0B-\x0C\x0E-\x1F]+ 【参考方案6】:

另一种方式...

    如果您还没有 Text FX 插件,请安装它 转到 TextFX 菜单选项 -> 将所有不可打印的字符转换为 #。它将用 3 # 个符号替换所有无效字符 转到查找/替换并查找###。用空格替换它。

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

【讨论】:

转换所有字符会将所有类型的标点符号替换为###。我期望的解决方案是:将“&”替换为“。将'&'替换为'。等等。 它工作正常,但是,该工具用一个 # 字符而不是三个替换有趣的字符。请注意。 Text FX 插件已弃用,甚至可能不再可用。参见例如TextFX's Future - “当名单足够长时,告别为社区服务的老马将变得切实可行。”【参考方案7】:

另一个好办法是在你的编辑器中进入 UTF8 模式,这样你就可以真正看到这些有趣的字符并自己删除它们。

【讨论】:

【参考方案8】:

保留新行:

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

下一步:

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

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

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

【讨论】:

以上是关于如何使用正则表达式和 Notepad++ 删除所有非 ASCII 字符?的主要内容,如果未能解决你的问题,请参考以下文章

如何删除所有行包括Notepad ++中的正则表达式的'collect_host_stats'[复制]

notepad++正则表达式删除大括号之间的所有文本

notepad++正则表达式删除某行某字符开始之前或者之后所有字符

教你使用notepad++ 删除空行的方法技巧

Notepad ++中的正则表达式删除空行

Notepad++怎么删除空行