最稳做法是用[^\x00-\x7F]删除所有非ASCII字符,因其不依赖编码猜测、兼容旧版Notepad++;而[^\x00-\xff]会拆解多字节中文致乱码,[一-龥]在UTF-8中失效,因PCRE引擎按Unicode码点而非字节匹配。

直接用 [^ -] 删除所有非 ASCII 字符,就能过滤掉汉字、全角标点、emoji、数学符号等——这是最稳、兼容性最好的做法,不依赖文件编码猜测,也不怕旧版 Notepad++ 崩溃。
为什么不用 [^ -ÿ] 或 [一-龥]
这两个写法在 ANSI 编码文件里基本失效:[^ -ÿ] 会把中文“中”(GBK 下是两个字节 ÖÐ)拆开匹配,导致半截乱码残留甚至替换异常;[一-龥] 是 GBK 字节映射,在 UTF-8 文件里根本找不到对应字符,搜“长”“东”这类字大概率漏掉。Notepad++ 的 PCRE 引擎只认 Unicode 码点逻辑,不是字节逻辑。
操作步骤:删非英文字符(含汉字、全角标点、emoji)
打开替换对话框(Ctrl+H),确保右下角状态栏显示「UTF-8」(如果不是,先转编码:编码 → 转为 UTF-8 编码):
- 勾选「匹配正则表达式」
- 「查找目标」填:
[^ -] - 「替换为」留空
- 点「全部替换」
完成后,所有非英文字符(包括中文、日文、€、→、?等)都被清空,只剩 ASCII 字母、数字、标点和空格。
如果只想删中文,但保留全角标点或 emoji
这时不能用 [^ -],得换更窄的范围:[u4e00-u9fff](常用汉字)或 [x{4e00}-x{9fa5}](稍宽一点,含部分扩展字):
- 先用
Ctrl+F测试:[u4e00-u9fff],确认高亮是否只覆盖你想要的汉字 - 进替换界面,「查找目标」填同上,「替换为」留空,勾选「匹配正则表达式」
- 注意:这个范围不包含全角空格
u3000、中文顿号、破折号,也不吃生僻字(如「?」「龘」) - 若发现漏字,可叠加扩展区:
[u4e00-u9fffu3400-u4dbfU00020000-U0002a6df],但 Notepad++ 对 Uxxxx 支持有限,建议优先用x{...}格式
真正难处理的不是怎么写正则,而是文件编码和不可见字符——比如 u200B(零宽空格)不会被 [^ -] 匹配到,它属于 ASCII 范围内的控制符,却会破坏 JSON 或 JS 变量名。这种字符必须单独用 x{200B} + 「匹配全部字符」来定位清理。


















