如何用Python删除文本文件特定内容?代码失效排查
问题分析与解决方案
原代码的核心问题
- 多行注释正则未转义特殊字符:
/*和*/中的*是正则元字符,必须用\转义,否则正则引擎无法识别为字面量,导致匹配失效。 - 变量赋值逻辑错误:最后一行处理
package时,直接使用了wtslc(处理完多行注释的结果),完全覆盖了之前处理import的结果。 - 正则模式与标志不匹配:处理单行注释、package和import时,未使用
re.MULTILINE标志,导致.*?可能跨多行匹配,而非仅匹配当前行。 - 处理顺序不合理:应先处理多行注释(避免单行注释被包含在多行注释内时误处理),再处理单行注释,最后清理package和import语句。
修正后的代码
import re txt = r"H:\APK_Source_Code_Merged\sstest1.txt" with open(txt, 'r', encoding='utf-8', errors='ignore') as fil: file_content = fil.read() # 1. 清理多行注释(/* ... */),匹配跨多行的注释 clean_multiline = re.sub(r"/\*.*?\*/", '', file_content, flags=re.DOTALL) # 2. 清理单行注释(// ... 到行尾),仅匹配当前行内的注释 clean_singleline = re.sub(r"//.*?$", '', clean_multiline, flags=re.MULTILINE) # 3. 清理整行import语句 clean_import = re.sub(r"^import.*?$", '', clean_singleline, flags=re.MULTILINE) # 4. 清理整行package语句 clean_package = re.sub(r"^package.*?$", '', clean_import, flags=re.MULTILINE) # 移除多余连续空行,优化输出格式 final_content = re.sub(r'\n\s*\n', '\n', clean_package).strip() print(final_content)
代码说明
- 多行注释处理:用
/\*.*?\*/精准匹配多行注释结构,re.DOTALL让.匹配换行符,确保跨多行的注释被完整移除。 - 单行注释处理:用
//.*?$匹配从//到行尾的内容,re.MULTILINE让$匹配每行结尾,避免误删换行后的有效代码。 - package/import处理:用
^import.*?$和^package.*?$匹配整行的import/package语句,re.MULTILINE让^匹配每行开头,确保精准删除整行声明。 - 空行清理:最后用正则合并连续空行,让输出代码结构更整洁。
测试结果
处理你提供的测试文件后,输出结果为:
public final class a extends l { protected JSONObject a(i iVar, g gVar) { return null; } }
内容的提问来源于stack exchange,提问作者ya xi er
相关产品推荐
相关产品推荐

