在通过java 反编译工具对jar进行反编译的时候,会增加很多注释,如下图:
/* */ import java.io.File;
/* */ import java.sql.Connection;
/* */ import java.sql.DatabaseMetaData;
/* */ import java.sql.DriverManager;
/* */ import java.sql.ResultSet;
/* */ import java.sql.SQLException;
/* */ import java.sql.Statement;
/* */ import java.util.ArrayList;
/* */ import sdet.fota.data.zhujin.DBReport;
/* */ import sdet.fota.data.zhujin.TableReport;
如何去掉呢? 用python的正则表达式,非常方便的去除。
这个注释,就用regex=r'/\*.*?\*/'
考虑到通用性,以及文件目录等,需要替换目录文件。就采用传参的方式,进行处理:
if __name__ == "__main__":
findString=r'/\*.*?\*/'
pos=0
filedir=sys.argv[1]
if(os.path.isdir(filedir)):
for roots,dirs,files in os.walk(filedir):
for fileName in files:
if fileName[-5:]=='.java':
fileName=roots+"\\"+fileName
print("fileName::",fileName)
main(fileName,pos,findString)
else:
main(filedir,pos,findString)
详细的实现不解释了,直接上代码:
import re
import os,sys
def main(fileName,pos,findString):
print("file Name:",fileName)
print("Pos::",pos)
print("findString:",findString)
if os.path.isfile(fileName):
newContextList=""
needModifyFlg=False
with open(fileName,mode="r",encoding="utf-8") as f:
for context in f:
newContext,flag=getNewContext(context,pos,findString)
newContextList=newContextList+newContext
if flag:
needModifyFlg=flag
if needModifyFlg:
with open(fileName,mode="w",encoding="utf-8") as f:
f.write(newContextList)
print("replace file::",fileName," OK")
else:
print("replace file::",fileName," Do not need")
return True
return False
def getNewContext(context,pos,findString):
regex=findString
match=re.search(regex,context[pos:])
if(match):
matchString=match.group()
newContext=context.replace(matchString,"",1)
#print(matchString)
#print(newContext)
return newContext,True
else:
return context,False
if __name__ == "__main__":
findString=r'/\*.*?\*/'
pos=0
filedir=sys.argv[1]
if(os.path.isdir(filedir)):
for roots,dirs,files in os.walk(filedir):
for fileName in files:
if fileName[-5:]=='.java':
fileName=roots+"\\"+fileName
print("fileName::",fileName)
main(fileName,pos,findString)
else:
main(filedir,pos,findString)