• python正则表达式使用


    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+" "+endbuf buf = buf.replace(endbuf,newend) return buf
    
    

    纯手工,原创

  • 相关阅读:
    2-4 递增链表的插入 链表
    KMPnext数组自看
    Shortest Prefixes POJ
    Xor Sum HDU
    Immediate Decodability HDU
    Repository HDU
    "strcmp()" Anyone? UVA
    Remember the Word UVALive
    A Magic Lamp HDU
    Check Corners HDU
  • 原文地址:https://www.cnblogs.com/fply/p/8301607.html
Copyright © 2020-2023  润新知