zoukankan      html  css  js  c++  java
  • 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)+"	"+a.group())
    11 s2=time.time()
    12 m=re.match(pattern,url)
    13 print('time is'+str(time.time()-s2)+"	"+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 函数总结
    PYTHON 模块总结
    python例题21--30
    python例题11--20
    python例题 1--10
    如何选中表格内同类名的某一行?
    table表格td内内容自动换行
    layer弹出层传值到父页面
    DIV内数据删除操作
    锚记搞定窗口滚动
  • 原文地址:https://www.cnblogs.com/cncyber/p/4441957.html
Copyright © 2011-2022 走看看