python正则表达式使用

本文介绍Python中re模块的使用方法,包括match、search、findall和finditer等函数的功能与应用场景,并通过示例代码展示如何提取smali文件中的方法名。

python正则表达re模块使用

 

1、match


 
re.match(pattern, string[, flags])  

 

从首字母开始开始匹配,string如果包含pattern子串,则匹配成功,返回Match对象,失败则返回None,若要完全匹配,pattern要以$结尾。

2、search

re.search(pattern, string[, flags])  

 

若string中包含pattern子串,则返回Match对象,否则返回None,注意,如果string中存在多个pattern子串,只返回第一个。

3、findall

re.findall(pattern, string[, flags])  

 

返回string中所有与pattern相匹配的全部字串,返回形式为数组。

4、finditer

re.finditer(pattern, string[, flags])  

 

返回string中所有与pattern相匹配的全部字串,返回形式为迭代器。

 

以下代码功能为,找出所有smali方法的函数名:

        f= open(fulpath,"rb")#fulpath为smali路径
        buf = f.read()
        f.close()
        
        pattern =re.compile(r".method.+ (.+?)\(.+\)")#这里不带flag表示 .不匹配新行
        m = None
        m=re.findall(pattern, buf)
        
        if None!=m:
            print m#打印所有匹配函数

打印找到所有函数名:

 默认findall这里打印的是

(.+?)匹配的数据,如果想打印出其它的信息可以换成finditer,以下代码与上面相同
        m=re.finditer(pattern, buf)
        
        for i in m:
            print i.group(1)

 

math对象group方法可以取正则表达式中的原子

group()与group(0)都表示取整个表达内容

正则中每个()中表示一个原子

 

re.sub用法

sub(pattern, repl, string, count=0, flags=0)

repl 这个参数可以是字符串,也可以是回调函数,下面例子是回调函数情况

#找到文件中onCreate中方法,传到
rel中处理 

buf =open(actfpath,"r").read() pt=re.compile("onCreate(.+?)(.end method)",re.DOTALL) buf =re.sub(pt,rel,buf) #----正则回调,插入smali代码 def rel(m): """""" smali=" invoke-virtual {p0}, Lorg/dogs/baidusdcardService;- \ " buf = m.group() endbuf =".end method" newend = smali+"\n"+endbuf buf = buf.replace(endbuf,newend) return buf

 

 
 

纯手工,原创

转载于:https://www.cnblogs.com/fply/p/8301607.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值