如何使用正则表达式和 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'[复制]