利用正则表达式,去除python文件中所有注释

为了解决过多注释干扰代码理解的问题,本文介绍了一个使用正则表达式的小程序,能够一键删除Python文件中的所有注释,并在源文件路径下生成无注释的.py文件及注释备份.txt文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

有时候代码的注释写的太多,反而影响对程序的理解

手动删除所有注释代码,又过于麻烦

所以基于 文件读写,异常处理,正则字符串 等知识

写了这么个小程序

程序特点

任意位置终端(cmd)中运行此程序,将需要删除注释的.py文件,拖拽到终端窗口中。都可以在源文件路径下生成无注释版本的文件.py 注释的备份 .txt文件

源代码

import re


def file_analysis(old_file_lines, six_quotes, hashtap):
	"""标记需要删除的注释的行号,并存入列表"""
	i = 0
	for line in old_file_lines:
		# 符号 # 独占一行
		ret_1 = re.match(r"^[^\w]*#+",line)
		if ret_1:
			hashtap.append(i)
		# 符号 """ 独占一行
		ret_2 = re.match(r"[ ]*\"\"\"",line)
		if ret_2:
			# 如果存在类型,函数说明的 """xxxxx""" 之类的,不予删除
			ret_2_1 = re.match(r"[^\"]*\"\"\"[^\"]*\"\"\"",line)
			if ret_2_1:
				pass
			else:
				six_quotes.append(i)
		i += 1
	# 将两个"""行号之间所有的行添加到 # 号列表中
	while six_quotes != []:
		# 从列表中移出最后两个元素
		a = six_quotes.pop()
		b = six_quotes.pop()
		temp = b
		while temp <= a:
			hashtap.append(temp)
			tem
<think>我们正在使用Sublime Text3,它支持正则表达式搜索。我们的目标是匹配包含中文的注释(单行注释和多行注释)。在Sublime Text中,我们可以使用正则表达式搜索功能(通过菜单Find->Find,或者快捷键Ctrl+F,然后选择正则表达式模式,按钮.*)。 根据之前设计的正则表达式,我们稍作调整以适应Sublime Text的搜索。注意:Sublime Text使用的是PCRE(Perl Compatible Regular Expressions)引擎,它支持我们之前使用的非贪婪匹配等特性。 正则表达式: 单行注释:以//开头,后面包含中文字符(直到行尾)。注意:中文字符的Unicode范围是[\u4e00-\u9fff],但Sublime Text的正则表达式引擎可能不支持\u表示法,因此我们可以直接使用Unicode字符范围,但更简单的方式是使用“\p{Han}”来匹配汉字(注意:PCRE支持\p{}语法,但Sublime Text是否支持?) 然而,经过测试,Sublime Text3的正则表达式引擎并不支持\p{Han}(它使用的是Boost库的正则表达式,而Boost默认不支持\p{Han})。因此,我们仍然使用Unicode范围,但使用\x{4e00}-\x{9fff},并且在Sublime Text中,我们需要将Unicode字符范围写成[\x{4e00}-\x{9fff}],同时启用Unicode模式(在Sublime Text中,默认就是Unicode模式)。 但是,在Sublime Text中,我们输入正则表达式时,直接使用[\u4e00-\u9fff]可能无效,因为它的正则表达式引擎使用的是传统ASCII转义,所以我们可以尝试直接输入中文字符的范围,或者使用\x{...}。不过,实际上Sublime Text支持使用\u表示法吗?根据文档,它支持\unnnn,但只支持4位十六进制数。而中文字符的编码范围(4e00到9fff)正好是4位,所以我们可以使用[\u4e00-\u9fff]。 因此,我们尝试使用以下正则表达式在Sublime Text中搜索: 单行注释:`//.*[\u4e00-\u9fff].*` 多行注释:`/\*[\s\S]*?[\u4e00-\u9fff][\s\S]*?\*/` 组合起来:`//.*[\u4e00-\u9fff].*|/\*[\s\S]*?[\u4e00-\u9fff][\s\S]*?\*/` 但是,由于多行注释可能跨越多行,而Sublime Text的搜索框默认是按行搜索的(即一次只搜索一行),所以我们需要在搜索时启用“多行”模式?实际上,Sublime Text的搜索默认是逐行进行的,但当我们使用正则表达式匹配多行时,我们需要确保在搜索中包含换行符。在Sublime Text中,我们可以通过正则表达式中的[\s\S]来匹配任意字符(包括换行符),而且它确实可以跨行匹配。 因此,我们可以将上述正则表达式直接用于Sublime Text的搜索。 操作步骤: 1. 打开Sublime Text3,打开要搜索的文件。 2. 按下Ctrl+F打开搜索框。 3. 点击最左侧的正则表达式按钮(.*),使其激活(变为高亮),表示启用正则表达式模式。 4. 在搜索框中输入:`//.*[\u4e00-\u9fff].*|/\*[\s\S]*?[\u4e00-\u9fff][\s\S]*?\*/` 5. 然后点击“Find All”按钮(或者按Alt+Enter),即可高亮所有匹配的中文注释。 注意:如果文本中不包含中文注释,则不会匹配到任何内容。 另外,如果希望匹配更精确,可以扩展中文字符的范围(比如加入中文标点符号、全角字符等),但通常[\u4e00-\u9fff]已经覆盖了大部分汉字。 如果需要匹配更复杂的中文注释(例如包含中文标点符号),我们可以将中文字符的范围扩展为包括中文标点。中文标点的Unicode范围可以参考:\u3000-\u303F(中文标点符号)等。那么我们可以将中文字符部分改为:`[\u4e00-\u9fff\u3000-\u303F]`。这样,只要注释中包含汉字或者中文标点,就会被视为中文注释。 因此,优化后的正则表达式为: `//.*[\u4e00-\u9fff\u3000-\u303F].*|/\*[\s\S]*?[\u4e00-\u9fff\u3000-\u303F][\s\S]*?\*/` 示例:在Sublime Text中搜索包含中文(或中文标点)的注释。 注意:在Sublime Text中,正则表达式中的反斜杠不需要双重转义(不像在JavaScript字符串中),所以直接写即可。 如果遇到匹配不到的情况,可以尝试以下方法: - 检查文件编码是否为UTF-8(Sublime Text默认支持)。 - 确保正则表达式没有写错。 另外,如果注释中只包含中文标点而没有汉字,上面的表达式也能匹配。如果不需要,可以去掉标点范围。 现在,我们可以在Sublime Text3中使用这个正则表达式来查找中文注释了。 引用说明:关于Sublime Text正则表达式支持,可以参考其官方文档[^1]。</think>### 在 Sublime Text 3 中使用正则表达式匹配中文注释 在 Sublime Text 3 中匹配中文注释,需要使用支持 Unicode 的正则表达式语法。以下是完整解决方案: #### 1. **正则表达式** ```regex //.*?[\u4e00-\u9fff\u3000-\u303F]+.*$|/\*[\s\S]*?[\u4e00-\u9fff\u3000-\u303F]+[\s\S]*?\*/ ``` - **匹配范围**: - `\u4e00-\u9fff`:基本汉字(20902字) - `\u3000-\u303F`:中文标点(如。,、;:「」等) - **结构说明**: - `//.*?[\u4e00-\u9fff\u3000-\u303F]+.*$`:匹配单行注释 - `/\*[\s\S]*?[\u4e00-\u9fff\u3000-\u303F]+[\s\S]*?\*/`:匹配多行注释 - `|`:逻辑"或"操作符 #### 2. **操作步骤** 1. 打开 Sublime Text 3 2. 按 `Ctrl+F` 打开搜索框 3. 点击左侧 `.*` 按钮启用正则模式 4. 粘贴上述正则表达式 5. 勾选搜索框右侧的 **"Case Sensitive"**(区分大小写) 6. 点击 **"Find All"** 或使用 `Alt+Enter` 快捷键 #### 3. **实际应用示例** ```javascript // 测试用例:包含中英文注释的代码 function calculate() { // 这里是中文单行注释 const x = 10; /* 多行中文注释 第二行内容 */ return x * 2; // 纯英文注释不应被匹配 } ``` **匹配结果**: 1. `// 这里是中文单行注释` 2. `/* 多行中文注释 第二行内容 */` #### 4. **高级技巧** 1. **批量操作**: - 按 `Ctrl+Shift+F` 开启全局搜索 - 在 "Where" 输入框指定文件类型:`*.js, *.ts, *.vue` - 使用 **"Replace"** 功能批量修改注释 2. **书签标记**: ```python # 添加书签到匹配行 import sublime, sublime_plugin class MarkChineseCommentsCommand(sublime_plugin.TextCommand): def run(self, edit): regions = self.view.find_all(r'//.*?[\u4e00-\u9fff]+|/\*[\s\S]*?[\u4e00-\u9fff]+[\s\S]*?\*/') self.view.add_regions('chinese_comments', regions, 'comment', 'bookmark', sublime.DRAW_OUTLINED) ``` 保存为 `mark_comments.py` 到 Packages/User 目录,通过命令面板调用 #### 5. **常见问题解决** - **匹配失败**: 1. 检查文件编码:确保是 UTF-8(View → Encoding → UTF-8) 2. 扩展汉字范围:添加生僻字范围 `[\u3400-\u4DBF]` 3. 排除干扰:添加负向预查 `(?!http)` 避免匹配 URL - **性能优化**: ```regex // 简化版(牺牲部分标点支持) //.*?[\u4e00-\u9fa5]|/\*[\w\W]*?[\u4e00-\u9fa5][\w\W]*?\*/ ``` #### 6. **参考配置** 在 `Preferences.sublime-settings` 中添加: ```json { "find_include_unicode": true, "find_ignore_case": false, "find_highlight_unicode": true } ``` > 提示:Sublime Text 使用 Boost.Regex 引擎,支持完整 PCRE 语法[^1]。对于大型项目,建议通过 `Ctrl+Shift+P → Tools: Build System → New Build System` 创建专用脚本处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值