Notepad++删除含中文的行需用^.[\u4e00-\u9fff].\R?正则并确保UTF-8编码、勾选正则模式;该表达式匹配整行含任意汉字的行(含简繁日韩汉字),兼顾Windows/Linux/macOS换行,且不误吞BOM。

Notepad++删除含中文的行必须用正则匹配整行
不能只搜[\u4e00-\u9fff]然后替换为空——那只会删掉汉字,原行还在,变成空行。真正要删的是“整行”,得靠^.*[\u4e00-\u9fff].*\R?这种结构把行首到换行符全包进去。
注意:^和$只锚定行内容,不包含换行符;漏掉\R?,删完就剩一堆空行。Notepad++默认不启用Unicode属性(比如\p{Han}),所以别写\p{Script=Han},它不认。
- 必须勾选「正则表达式」模式,取消勾选「. 匹配换行符」
- 编码必须是UTF-8(右下角看,不是ANSI或GBK);ANSI下
[\u4e00-\u9fff]基本失效 -
\R?比\r?\n更稳妥,能兼容Windows(\r\n)、Linux(\n)、macOS(\r)三种换行 - 如果文件开头有BOM(
EF BB BF),\R?不会误吞它,安全
删所有含任意中文的行:用^.*[\u4e00-\u9fff].*\R?
这是最常用也最稳的写法。范围\u4e00-\u9fff覆盖了常用汉字(含简体、繁体、日韩汉字),但不含全角标点(如,。!?)、平假名、片假名。如果你真要删含全角字符的行,得额外加[\u3000-\u303f\u3040-\u309f\u30a0-\u30ff],但通常没必要。
常见翻车点:
- 关键词是“的”“了”“人”这种高频字?
^.*的.*\R?会删掉90%的行——先按Ctrl + F,输入同样正则,点「查找全部」,右侧结果窗格里逐行确认是否真要删 - 想排除代码注释里的中文?得加上下文锚点,比如Python注释行:
^.*#.*[\u4e00-\u9fff].*\R? - 匹配失败?检查右下角编码显示是不是UTF-8;如果不是,菜单栏「编码 → 转为UTF-8」再试
删含特定中文词的行:比如「测试」「错误」「TODO」
直接把词塞进正则就行,但要注意中文本身没大小写问题,不用加(?i);真正要防的是全角/半角混用(比如「测试 」带全角空格)或繁简混写(「裏」vs「里」)。
示例:
- 删含「测试」的行:
^.*测试.*\R? - 删含「错误」或「警告」的行:
^.*(?:错误|警告).*\R?(用(?:...)避免捕获开销) - 删含「TODO」且在注释里的行(C/Java风格):
^.*//.*TODO.*\R? - 词里有正则元字符?比如删「C++」,
+必须转义:C\+\+
别写错误|警告就完事——那只会匹配这两个词本身,删不掉整行。
删完发现格式乱了?重点看换行符和BOM
删完出现段落粘连、跳行错位,大概率不是正则写错了,而是换行符类型被搞混了。Notepad++右下角会显示当前换行符类型(DOS / UNIX / MAC),不同系统对\r\n和\n解析不一样。
- 统一换行格式:菜单「编辑 → 文档格式转换 → 转为UNIX格式」(推荐,Git和脚本最友好)
- BOM还在但不该在?删完后右下角显示「UTF-8-BOM」,又不想留BOM,可「编码 → 转为UTF-8」
- 最后一行没删干净?因为光标不在文件开头——
全部替换只从当前光标位置向下执行,务必Ctrl + Home回到顶部再点 - 大文件慎用「全部替换」:先
Ctrl + F→ 输入正则 → 「查找全部」看匹配数;超过千行,建议改用「搜索 → 标记 → 标记全部」,再「编辑 → 行操作 → 删除已标记行」,更可控
真正难的从来不是怎么写正则,而是判断“这一行该不该删”——业务逻辑一变,[\u4e00-\u9fff]就得加白名单或改锚点。


















