正则批量删注释行不通,必须分步处理:先用/\*\[\s\S\]\*?\*/删跨行块注释(需启用. matches newline),再用"""[\s\S]*?"""|'''[\s\S]*?'''删Python三引号字符串,最后用^\s*(?://|#).*$安全删除行首注释,每步须Find All抽检三处并确认语法高亮正确。

直接用正则批量删注释行不通——不区分语言、不识别上下文、极易误删字符串或 URL 里的 // 和 #,必须分步 + 锚点 + 预检。
先删 /* */ 类块注释,必须勾选 “. matches newline”
默认情况下 .*? 不匹配换行符,/\*.*?\*/ 只能删单行块注释。跨行时唯一可靠写法是 /\*[\s\S]*?\*/,其中 [\s\S] 显式覆盖所有字符(含换行),? 保证非贪婪。
- 不勾选右下角
.图标,90% 以上多行/* */会被跳过 - 用
/\*.*\*/(无?)可能从第一个/*一路吃到文件末尾最后一个*/,中间函数全丢 - Python 的三引号文档字符串不是
/* */,得换用"""[\s\S]*?"""或'''[\s\S]*?''',且需确认右下角语法设为Python - CSS/JS 文件若被误设为
Plain Text,/\*[\s\S]*?\*/可能吞掉字符串里的"/* in string */"
再删 // 和 # 行首注释,别碰行中注释
^\s*(?://|#).*$ 是安全边界:只匹配行首或缩进后紧跟的注释标记,避开 https://、url = "a.com#anchor" 等常见误伤点。
- 直接搜
//.*$或#.*$极危险,80% 以上项目会误删配置项或 URL - 这个正则不处理行中注释(如
int x = 1; // init),强行删会破坏语句结构 - 若真需要删行中注释,改用
\s+(?://|#).*$,但必须手动逐个确认——Sublime 没语法树,无法判断它是否在字符串内 - HTML 注释要用
<!--[\s\S]*?-->,不能混用//正则
每步执行前必须 Find All 抽检三处
即使用了最稳妥的正则,仍可能误删:const r = /a\/b/; 里的 /、JSON 字符串中的 /*、配置文件里带 # default=1 的关键参数。
- 按
Ctrl+Shift+F粘贴正则 → 点Find All→ 看高亮是否全为真注释 - 至少抽检开头(如 license header)、中间逻辑块(如函数体)、结尾配置段(如 env vars)
- 删完立刻
Ctrl+Z回退验证,比事后从 Git 恢复快得多 - 删完检查文件末尾:Python/Shell 项目常要求 POSIX 兼容,需确保末尾有换行符(可用
Ctrl+Shift+P→Insert Final Newline)
别信“一键通吃”,不同语言必须换正则
没有万能表达式。同一份正则在 .py、.js、.html 里行为完全不同,原因不在正则本身,而在 Sublime 的语法高亮层是否识别字符串/注释边界。
- 处理
.py文件前,按Ctrl+Shift+P→Set Syntax: Python;否则三引号字符串不会被正确隔离 - 处理
.html时,<!--必须配-->,不能套用/* */正则 - 若文件语法被设为
Plain Text,所有基于语法感知的清理都会失效,正则退化为纯文本暴力匹配 - 真正容易被忽略的是:Sublime 分不清「注释里的中文」和「字符串里的中文」,也分不清「模板字面量里的
//」和「真注释」——所有操作都在字符层面,没有 AST 支撑


















