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

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

Python正则表达式总结的更多相关文章

  1. Python 正则表达式入门(中级篇)

    Python 正则表达式入门(中级篇) 初级篇链接:http://www.cnblogs.com/chuxiuhong/p/5885073.html 上一篇我们说在这一篇里,我们会介绍子表达式,向前向 ...

  2. Python正则表达式中的re.S

    title: Python正则表达式中的re.S date: 2014-12-21 09:55:54 categories: [Python] tags: [正则表达式,python] --- 在Py ...

  3. Python 正则表达式入门(初级篇)

    Python 正则表达式入门(初级篇) 本文主要为没有使用正则表达式经验的新手入门所写. 转载请写明出处 引子 首先说 正则表达式是什么? 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达 ...

  4. python正则表达式re

    Python正则表达式: re 正则表达式的元字符有. ^ $ * ? { [ ] | ( ).表示任意字符[]用来匹配一个指定的字符类别,所谓的字符类别就是你想匹配的一个字符集,对于字符集中的字符可 ...

  5. Python正则表达式详解

    我用双手成就你的梦想 python正则表达式 ^ 匹配开始 $ 匹配行尾 . 匹配出换行符以外的任何单个字符,使用-m选项允许其匹配换行符也是如此 [...] 匹配括号内任何当个字符(也有或的意思) ...

  6. 比较详细Python正则表达式操作指南(re使用)

    比较详细Python正则表达式操作指南(re使用) Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式.Python 1.5之前版本则是通过 regex 模块提供 E ...

  7. Python正则表达式学习摘要及资料

    摘要 在正则表达式中,如果直接给出字符,就是精确匹配. {m,n}? 对于前一个字符重复 m 到 n 次,并且取尽可能少的情况 在字符串'aaaaaa'中,a{2,4} 会匹配 4 个 a,但 a{2 ...

  8. python正则表达式 小例几则

    会用到的语法 正则字符 释义 举例 + 前面元素至少出现一次 ab+:ab.abbbb 等 * 前面元素出现0次或多次 ab*:a.ab.abb 等 ? 匹配前面的一次或0次 Ab?: A.Ab 等 ...

  9. Python 正则表达式-OK

    Python正则表达式入门 一. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分. 正则表达式是用于处理字符串的强大工具, 拥有自己独特的语法以及一个独立的处理引擎, 效率上 ...

  10. Python天天美味(15) - Python正则表达式操作指南(re使用)(转)

    http://www.cnblogs.com/coderzh/archive/2008/05/06/1185755.html 简介 Python 自1.5版本起增加了re 模块,它提供 Perl 风格 ...

随机推荐

  1. ie浏览器兼容性快速处理小招

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. ODI 12c中使用Groovy脚本创建工程

    本文主要介绍在ODI中使用groovy创建工程,并添加一个表转换的映射.要创建groovy脚本,可以从ODI Studio的菜单:工具->Groovy->新脚本 打开一个编辑窗口.在执行下 ...

  3. java,android获取系统当前时间

    SimpleDateFormat formatter = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss ");Date curDate = ...

  4. CentOS 7.0默认使用的是firewall作为防火墙。

    systemctl start firewalld.service#启动firewallsystemctl stop firewalld.service#停止firewallsystemctl dis ...

  5. lightoj1082 线段树

    //Accepted 5596 KB 396 ms //线段树求区间最小值 #include <cstdio> #include <cstring> #include < ...

  6. angularJs 自定义服务 provide 与 factory 的区别

    <!DOCTYPE html> <html lang="en" ng-app="myApp"> <head> <met ...

  7. TCP同步传送数据示例(简洁、清楚)

    转自:http://www.2cto.com/kf/201206/134841.html 本例子写了个简单的TCP数据传送功能.没有使用BinaryWriter,BinaryReader,而是使用Ne ...

  8. (转)HTML 5离线存储之Web SQL

    原文:http://developer.51cto.com/art/201106/267357.htm HTML 5离线存储之Web SQL 2011-06-07 15:14 kkun kkun的博客 ...

  9. hdu 2047

    PS:又是上课偷懒..去递推.. 代码: #include "stdio.h"#include "math.h"long long dp[55];long lo ...

  10. servlet容器处理请求过程

    下图是关于tomcat服务器接收客户请求并作出响应的图例. tomcat不仅仅只是一个servlet容器,也是一个web服务器,servlet容器在web服务器之内或者说servlet容器托管于web ...