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

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看看。

 import time,re

 def main():
pattern=r'(http:\\)?(www\.)?cnblogs\.com'
url='www.cnblogs.com'
## r=re.compile(pattern)
s1=time.time()
r=re.compile(pattern)
a=r.match(url)
print('time is'+str(time.time()-s1)+"\t"+a.group())
s2=time.time()
m=re.match(pattern,url)
print('time is'+str(time.time()-s2)+"\t"+m.group())
pass if __name__=="__main__":
main(); >>> ================================ RESTART ================================
>>>
time is0.0009999275207519531 www.cnblogs.com
time is0.0 www.cnblogs.com
>>>

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

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

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

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

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

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

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

 import time,re

 def main():
pattern=r'(http:\\)?(www\.)?cnblogs\.com'
url1='www.cnblogs.com'
url2='cnblogs.com'
m=re.sub(pattern,'baidu.com','sss'+url1+'eee')
print(m)
if __name__=="__main__":
main(); >>> ================================ RESTART ================================
>>>
sssbaidu.comeee
>>>

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

 import time,re

 def main():
d='12|234|23423|234|'
l=re.split(r'\|',d)
print(str(l))
if __name__=="__main__":
main();
>>> ================================ RESTART ================================
>>>
['', '', '', '', '']

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

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

m.start()

m.end()

m.span()

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

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

最新文章

  1. linux shell 中的sleep命令
  2. [LeetCode] First Bad Version 第一个坏版本
  3. 使用JSON Schema来验证接口数据
  4. python学习笔记4(文件操作)
  5. JAVA学习Swing章节流布局管理器简单学习
  6. vmware12安装vmtools
  7. [置顶] [VS2010]逸雨清风 永久稳定音乐外链生成软件V0.1
  8. VirtualBox 运行失败
  9. java类构造器的理解
  10. 【转】int && 非常量右值
  11. ContentSize、Contentoffset以及ContentInset属性
  12. C#编程语言之委托与事件(一)—— C/C++函数指针和C#委托初步
  13. 问题:win7下配置好服务器就是不能查询数据库。(已解决)
  14. 好坑吖,几乎GG,关于Nginx和supervisor的配置
  15. BUAA Summer Practice 2017 #1 字符串专场
  16. C# 时间控件 竖直进度条 饼图显示 仪表盘 按钮基础控件库
  17. Oracle 11g即时客户端在windows下的配置
  18. [转]ZooKeeper 集群环境搭建 (本机3个节点)
  19. nodejs基础学习1
  20. 硬盘分区表知识——详解硬盘MBR (转)

热门文章

  1. touch ImageView
  2. 安装eclipse for c/c++环境
  3. swing LayoutManager 和多态
  4. Thread IsBcakgroud
  5. JVM-垃圾收集器
  6. (五)CoreData 使用 (转)
  7. 如何使用 PagedList.Mvc 分页
  8. openstack 本地化
  9. HackRF实现无线门铃信号分析重放
  10. Interview----First single charactor