您的位置:首页 > 编程语言 > Python开发

python正则表达式使用

2018-01-17 10:46 357 查看
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



纯手工,原创
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: