使用Python正则移除Java代码指定内容时出现运行异常
修复后的Java代码清理脚本
原脚本的问题点
- 缩进错误:
with代码块内的语句未缩进,引发语法错误 - 正则表达式逻辑错误:
- 单行注释匹配:原
//.?仅能匹配//后单个字符,无法覆盖整行注释 - 多行注释匹配:原
/*.?*/未转义正则元字符*和/,且未使用非贪婪匹配,会错误匹配跨多个注释的内容 - package语句匹配:正则完全偏离目标,错误引入
\*/,未匹配完整的package行 - import语句匹配:原
import.?仅匹配import后单个字符,无法覆盖整行import语句
- 单行注释匹配:原
- 变量引用错误:处理package时误用原始文件内容变量,导致之前的注释清理结果被丢弃
修复后的代码
import re # 读取文件内容 with open('H:\\APK_Source_Code_Merged\\abc.txt', 'r', encoding='utf-8', errors='ignore') as fil: file_content = fil.read() # 移除单行注释:// 到行尾的内容 no_single_comment = re.sub(r"//[^\n]*", '', file_content) # 移除多行注释:/* 到 */ 的内容,非贪婪匹配避免过度匹配 no_multi_comment = re.sub(r"/\*.*?\*/", '', no_single_comment, flags=re.DOTALL) # 移除package行:匹配以package开头的整行(含缩进) no_package = re.sub(r"^\s*package.*?\n", '', no_multi_comment, flags=re.MULTILINE) # 移除import行:匹配以import开头的整行(含缩进) final_content = re.sub(r"^\s*import.*?\n", '', no_package, flags=re.MULTILINE) print(final_content)
关键修复说明
- 修正缩进:确保
with块内的语句正确缩进 - 单行注释正则:
//[^\n]*匹配//后所有非换行字符,精准覆盖单行注释 - 多行注释正则:
/\*.*?\*/转义元字符,并用re.DOTALL让.匹配换行,.*?非贪婪匹配避免从第一个/*匹配到最后一个*/ - package/import正则:使用
^\s*匹配行首的缩进,.*?\n匹配整行内容,re.MULTILINE让^匹配每一行的开头 - 变量传递:确保每一步处理都基于上一步的结果,避免覆盖
内容的提问来源于stack exchange,提问作者ya xi er
相关产品推荐
相关产品推荐

