notepad++ 删除注释需分类型处理:整行注释用 ^[#;]\s.\r?,行内//注释用 //.$,多行/ /注释用 /*[\s\s]?*/,再清理空行^\s$\r?及多余换行\r{2,}→\r。

Notepad++ 不能“一键”删光所有注释,必须按注释类型分步处理;盲目用通用正则(比如^#.*$)极大概率误删 #include、#!/bin/bash 或 Python 的 docstring。
删 # / ; 开头的整行注释(shell、ini、nginx 配置最常用)
这类注释以 # 或 ; 起始,占一整行,后面可跟任意内容(包括空格)。直接匹配行首最安全,不依赖语言模式。
- 打开
Ctrl + H→ 勾选「正则表达式」→ 取消勾选「. 匹配换行符」 - 查找目标填:
^[#;].*\R? - 替换为:留空
- 如果文件里有
#include <stdio.h></stdio.h>这类行,说明你得加空格约束:^[#;]\s.*\R?(只删#或;后紧跟空白的行) -
\R?比\r?\n更可靠,能同时兼容 Windows、Linux、macOS 换行
删 // 行内注释(C/Java/JS 等),但保留前面代码
不是删整行,而是截掉 // 及其后所有内容,保持原行结构和换行符。这条规则对纯注释行(如 // log)无效,需配合上一条补删。
- 查找目标:
//.*$ - 替换为:留空
- 必须确保「. 匹配换行符」是关闭状态,否则
.*会吞掉下一行 - 注意:像
https://example.com这种 URL 不会被误中——$锚定行尾,//必须出现在行内而非中间
删 /* */ 多行注释(含跨行),但避免吃掉中间代码
Notepad++ 默认 PCRE 引擎不支持跨行 .,必须用 [\s\S] 替代,并启用非贪婪匹配,否则一个 /* 会一直吃到文件末尾最后一个 */。
- 查找目标:
/\*[\s\S]*?\*/ - 替换为:留空
-
[\s\S]是关键:它匹配任意字符(含换行),比.更彻底 -
*?是非贪婪模式,防止一次吞掉多个注释之间的代码块 - 嵌套注释(如
/* outer /* inner */ end */)无法处理——PCRE 本身不支持,不是 Notepad++ 的锅 - 大文件慎用:这个正则回溯量大,可能卡顿;建议先用
Ctrl + F→ 「标记」→ 输入/\*定位大致范围再操作
删完注释后,清空伪空行和多余换行
注释删掉后常留下大量仅含空格、tab 或全空的行,看着干净,实际影响阅读和后续处理。
- 先删纯空行(含只有空白字符的行):
^\s*$\R?→ 替换为空 -
\s包含空格、\t、\r、\n,比[ \t]更全面 - 如果文件开头有 UTF-8 BOM(
\xEF\xBB\xBF),\s不识别它,得单独搜\xEF\xBB\xBF并删掉 - 连续多个空行?再跑一遍:
\R{2,}→\R,把 ≥2 个换行合并成 1 个 - 别用
^$:它不匹配带空格的行,容易漏删
真正难的不是写对某条正则,而是判断哪些以 # 开头的行该删、哪些该留——#!/bin/bash、#define、#include 都不是注释。没有语法感知能力的文本编辑器,永远只能做“有风险的擦除”,不是“安全的清理”。











