最稳妥匹配所有print语句的正则为^\sprint\b(?!\s[:=]).*?$,需勾选match case和. matches newline;实际推荐分两步:先查单行再处理跨行,并人工预览避免误删字符串或注释中的print。

Sublime 中匹配所有 print 语句的正则写法
Sublime Text 的「Find in Files」或「Replace」功能支持 PCRE 风格正则,但要注意它默认不开启 multiline 和 dotall 模式,所以跨行 print 很容易漏掉。最稳妥的写法是:^\s*print\s*(\(.*?\)|$)(启用 ^$ 匹配行首行尾,并勾选 . matches newline 才能覆盖多行括号内容)
不过实际中更推荐分两步:先删单行 print,再处理跨行——因为 Python 中跨行 print 通常带括号且换行在括号内,用 print\s*\([^)]*\) 无法覆盖换行,得改用 print\s*\(.*?\) 并手动开启 . matches newline。
Python 2 和 Python 3 的 print 语法差异影响匹配
Python 2 中 print 是语句,可无括号:print "hello" 或 print 1, 2;Python 3 中是函数,必须带括号。这意味着:
- 只匹配
print\([^)]*\)会漏掉 Python 2 的裸print语句 - 若项目混用两种语法,建议用
^\s*print\b(?!\s*[:=])先抓所有以print开头的行(排除print = ...或print:这类误匹配) - 再配合
^\s*print\b.*$+. matches newline覆盖跨行情况,但要小心误删print字符串(如"print x"),所以务必勾选Match Case和Whole Word(后者对print效果有限,需靠\b边界保证)
一键删除时容易误删的三类边界情况
直接全局替换为空字符串风险很高,以下情况常被忽略:
-
print出现在字符串或注释里,例如# debug: print x或s = "print('hello')"—— 正则本身无法区分,只能靠人工预览替换(Sublime 的Replace Preview窗格必须逐条确认) - 多行
print后紧跟缩进代码,例如:print( "hello" ) x = 1直接删掉三行会破坏缩进结构,建议替换成空行(即替换为\n\n)再手动清理空行 - 条件式
print,如if debug: print("x")—— 删除后留下悬空的if debug:,必须连同整行删,正则应写成^\s*if\s+debug\s*:\s*print\b.*$单独处理
推荐的两步安全操作流程
别指望一个正则通吃,按顺序执行更可靠:
- 第一步:打开
Find → Find in Files,查找^\s*print\b.*$,勾选Regular Expression、Match Case、. matches newline,不勾Whole Word(否则跨行失效),预览所有结果,排除明显字符串/注释行 - 第二步:切换到
Replace in Files,替换为(空),但先点Replace单条验证格式是否正常;确认无误后再点Replace All - 最后执行一次
Ctrl+Shift+P → Remove Empty Lines(需安装 Package Control 中的TrailingSpaces或手动搜空行替换)清理残留空行
真正麻烦的不是正则本身,而是 print 在字符串、f-string、docstring、甚至 AST 解析代码里都可能出现——这种场景必须放弃正则,改用 ast.parse 脚本清理,Sublime 只适合快速手工调试阶段。











