Python正则表达式总结

正则表达式也一直用,但是没系统的总结过,今天借这个时间梳理一下。

Python中的正则表达式操作依靠re模块儿完成。

常用的方法:

re.compile(pattern,flags=0)

#返回一个编译过的正则表达式re对象,可以优化执行速度。

demo:

r=re.compile(r'(http:\\)?(www\.)?cnblogs\.com')



m=r.match('www.cnblogs.com')



print(m.group(0))  

#若果不编译就要这样写了

m=re.match(r'(http:\\)?(www\.)?cnblogs\.com','www.cnblogs.com')



print(m.group(0))

#说明:re在运行时编译,效率嘛要比上一种方法低一点儿。突然想试试低多少,写个demo看看。

 1 import time,re

 2 

 3 def main():

 4 pattern=r'(http:\\)?(www\.)?cnblogs\.com'

 5 url='www.cnblogs.com'

 6 ## r=re.compile(pattern)

 7 s1=time.time()

 8 r=re.compile(pattern)

 9 a=r.match(url)

10 print('time is'+str(time.time()-s1)+"\t"+a.group())

11 s2=time.time()

12 m=re.match(pattern,url)

13 print('time is'+str(time.time()-s2)+"\t"+m.group())

14 pass

15 

16 if __name__=="__main__":

17 main();

18 

19 >>> ================================ RESTART ================================

20 >>> 

21 time is0.0009999275207519531    www.cnblogs.com

22 time is0.0    www.cnblogs.com

23 >>>
View Code

测试代码写的不算严谨,但结果倒也有趣,至少说明了两个问题:

1.由于两次匹配采用的pattern相同,Python内部进行了优化,所以第二次时间接近为零。

2.时间花费主要消耗在了正则表达式编译上,匹配上的时间与之相比很少。

3.如果只是做一次匹配,两种写法无所谓。

同理的以下方法也可以参考上边的两种写法:

re.search()#搜索字符串的内容,这个方法很好理解,就不做测试了。

re.sub()#这个用的比较少,写个demo给大家看一下,其实就相当于str.replace()方法,只不过它更灵活一点。

 1 import time,re

 2 

 3 def main():

 4     pattern=r'(http:\\)?(www\.)?cnblogs\.com'

 5     url1='www.cnblogs.com'

 6     url2='cnblogs.com'

 7     m=re.sub(pattern,'baidu.com','sss'+url1+'eee')

 8     print(m)

 9 if __name__=="__main__":

10     main();

11 

12 >>> ================================ RESTART ================================

13 >>> 

14 sssbaidu.comeee

15 >>> 
View Code

re.split()#利用正则表达式去分割一个字符串 demo

 1 import time,re

 2 

 3 def main():

 4     d='12|234|23423|234|'

 5     l=re.split(r'\|',d)

 6     print(str(l))

 7 if __name__=="__main__":

 8     main();

 9 >>> ================================ RESTART ================================

10 >>> 

11 ['12', '234', '23423', '234', '']
View Code

 

对于re.match()返回的matchobject有以下几个方法:

m.group(n)#返回匹配中的组和子组的信息。

m.start()

m.end()

m.span()

 

这几个是比较常用的方法,另外推荐两篇比较好的正则表达式教程:

http://dragon.cnblogs.com/archive/2006/05/08/394078.html

 

你可能感兴趣的:(python)