aaaaaaaaaaaa
代码改变世界

python正则表达式使用

2018-01-17 10:46  二进制乐谱  阅读(895)  评论(0编辑  收藏  举报

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

 



纯手工,原创

aaaaaaaaaaaaa