Python re模块介绍


Posted in Python onNovember 30, 2014

Python中转义字符

正则表达式使用反斜杠” \ “来代表特殊形式或用作转义字符,这里跟Python的语法冲突,因此,Python用” \\\\ “表示正则表达式中的” \ “,因为正则表达式中如果要匹配” \ “,需要用\来转义,变成” \\ “,而Python语法中又需要对字符串中每一个\进行转义,所以就变成了” \\\\ “。
上面的写法是不是觉得很麻烦,为了使正则表达式具有更好的可读性,Python特别设计了原始字符串(raw string),需要提醒你的是,在写文件路径的时候就不要使用raw string了,这里存在陷阱。raw string就是用'r'作为字符串的前缀,如 r”\n”:表示两个字符”\”和”n”,而不是换行符了。Python中写正则表达式时推荐使用这种形式。

正则表达式元字符说明

.  匹配除换行符以外的任意字符
^  匹配字符串的开始
$  匹配字符串的结束
[] 用来匹配一个指定的字符类别
?  对于前一个字符字符重复0次到1次
*  对于前一个字符重复0次到无穷次
{} 对于前一个字符重复m次
{m,n} 对前一个字符重复为m到n次
\d 匹配数字,相当于[0-9]
\D 匹配任何非数字字符,相当于[^0-9]
\s 匹配任意的空白符,相当于[ fv]
\S 匹配任何非空白字符,相当于[^ fv]
\w 匹配任何字母数字字符,相当于[a-zA-Z0-9_]
\W 匹配任何非字母数字字符,相当于[^a-zA-Z0-9_]
\b 匹配单词的开始或结束

模块函数说明即举例
re.compile 将正则表达式编译成pattern对象

compile(pattern, flags=0)

第一个参数:规则
第二个参数:标志位

re.match 只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None

match(pattern, string, flags=0)

第一个参数:规则
第二个参数:表示要匹配的字符串
第三个参数:标致位,用于控制正则表达式的匹配方式

re.search 匹配整个字符串,直到找到一个匹配

search(pattern, string, flags=0)

第一个参数:规则
第二个参数:表示要匹配的字符串
第三个参数:标致位,用于控制正则表达式的匹配方式

>>> import re
>>> pattern = re.compile(r'linuxeye')
>>> match = pattern.match('3water.com')
>>> print match
<_sre.SRE_Match object at 0x7f4e96e61c60>
>>> print match.group()
linuxeye
>>> m = pattern.match('blog.3water.com') #match匹配开头,没找到
>>> print m
None
>>> m = pattern.search('blog.3water.com') #search匹配整个字符串,直到找到一个匹配
>>> print m
<_sre.SRE_Match object at 0x7f15abfc6b28>
>>> print m.group()
linuxeye
>>> m = re.match(r'linuxeye','3water.com') #不用re.compile
>>> print m
<_sre.SRE_Match object at 0x7f4e96e61b90>
>>> print m.group()
linuxeye
>>> m = re.match(r'linuxeye','3water.com')
>>> print m
None

re.split 用于来分割字符串

split(pattern, string, maxsplit=0)

第一个参数:规则
第二个参数:字符串
第三个参数:最大分割字符串,默认为0,表示每个匹配项都分割
实例:分割所有的字符串

>>> import re
>>> test_str = "1 2 3 4 5"
>>> re.split(r'\s+',test_str)
['1', '2', '3', '4', '5']
>>> re.split(r'\s+',test_str,2) #分割前2个
['1', '2', '3 4 5']
 
>>> test_str = "1 . 2. 3 .4 . 5"
>>> re.split(r'\.',test_str)
['1 ', ' 2', ' 3 ', '4 ', ' 5']
>>> re.split(r'\.',test_str,3)
['1 ', ' 2', ' 3 ', '4 . 5']

re.findall 在目标字符串查找符合规则的字符串

findall(pattern, string, flags=0)

第一个参数:规则
第二个参数:目标字符串
但三个参数:后面还可以跟一个规则选择项
返回的结果是一个列表,建中存放的是符合规则的字符串,如果没有符合规则的字符串呗找到,就会返回一个空值

>>> import re
>>> test_mail = '<test01@gmail.com> <test02@gmail.org> test03@gmail.net'
>>> mail_re = re.compile(r'\w+@g....\.[a-z]{3}')
>>> re.findall(mail_re,test_mail)
['test01@gmail.com', 'test02@gmail.org', 'test03@gmail.net']

re.sub 以正则表达式为基础的替换工作

sub(pattern, repl, string, count=0)

第一个参数:规则
第二个参数:替换后的字符串
第三个参数:字符串
第四个参数:替换个数。默认为0,表示每个匹配项都替换

>>> test = 'blog.3water.com 3water.com'
>>> test_re = re.compile(r'\.')
>>> re.sub(test_re,'--',test)
'blog--linuxeye--com linuxeye--com'
>>> re.sub(test_re,'--',test,1)
'blog--3water.com 3water.com'
Python 相关文章推荐
Python的Django框架中TEMPLATES项的设置教程
May 29 Python
Python中的fileinput模块的简单实用示例
Jul 09 Python
python dict.get()和dict['key']的区别详解
Jun 30 Python
Python 3.x 连接数据库示例(pymysql 方式)
Jan 19 Python
python微信好友数据分析详解
Nov 19 Python
Python实现钉钉发送报警消息的方法
Feb 20 Python
Python玩转加密的技巧【推荐】
May 13 Python
Python音频操作工具PyAudio上手教程详解
Jun 26 Python
pip指定python位置安装软件包的方法
Jul 12 Python
wxPython+Matplotlib绘制折线图表
Nov 19 Python
在Django下创建项目以及设置settings.py教程
Dec 03 Python
pycharm中如何自定义设置通过“ctrl+滚轮”进行放大和缩小实现方法
Sep 16 Python
Python os模块介绍
Nov 30 #Python
Python实现的检测网站挂马程序
Nov 30 #Python
Python实现网站文件的全备份和差异备份
Nov 30 #Python
Python3 能振兴 Python的原因分析
Nov 28 #Python
Python3 正在毁灭 Python的原因分析
Nov 28 #Python
关于你不想知道的所有Python3 unicode特性
Nov 28 #Python
Python 2.7.x 和 3.x 版本的重要区别小结
Nov 28 #Python
You might like
php变量范围介绍
2012/10/15 PHP
CentOS6.5 编译安装lnmp环境
2014/12/21 PHP
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
2016/05/11 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
基于JQuery的密码强度验证代码
2010/03/01 Javascript
jQuery $.data()方法使用注意细节
2012/12/31 Javascript
JS获取农历日期具体实例
2013/11/14 Javascript
关于Javascript作用域链的八点总结
2013/12/06 Javascript
浏览器缩放检测的js代码
2014/09/28 Javascript
JavaScript 对象深入学习总结(经典)
2015/09/29 Javascript
Bootstrap框架下下拉框select搜索功能
2020/03/26 Javascript
HTML5基于Tomcat 7.0实现WebSocket连接并实现简单的实时聊天
2016/10/31 Javascript
BootStrap学习系列之布局组件(下拉,按钮组[toolbar],上拉)
2017/01/03 Javascript
详解AngularJS脏检查机制及$timeout的妙用
2017/06/19 Javascript
bootstrap table插件的分页与checkbox使用详解
2017/07/23 Javascript
JS的Ajax与后端交互数据的实例
2018/08/08 Javascript
vue过滤器用法实例分析
2019/03/15 Javascript
vue 点击展开显示更多(点击收起部分隐藏)
2019/04/09 Javascript
JS中call()和apply()的功能及用法实例分析
2019/06/28 Javascript
Vue实现购物车详情页面的方法
2019/08/20 Javascript
详解Vscode中使用Eslint终极配置大全
2019/11/08 Javascript
[02:41]DOTA2亚洲邀请赛小组赛第三日 赛事回顾
2015/02/01 DOTA
[05:24]TI9采访——教练
2019/08/24 DOTA
Python 正则表达式操作指南
2009/05/04 Python
centos下更新Python版本的步骤
2013/02/12 Python
Python 创建子进程模块subprocess详解
2015/04/08 Python
TensorFlow实现卷积神经网络
2018/05/24 Python
深入flask之异步非堵塞实现代码示例
2018/07/31 Python
Python基本socket通信控制操作示例
2019/01/30 Python
python 求某条线上特定x值或y值的点坐标方法
2019/07/09 Python
在python中实现同行输入/接收多个数据的示例
2019/07/20 Python
python中通过selenium简单操作及元素定位知识点总结
2019/09/10 Python
HTML+CSS3 模仿Windows7 桌面效果
2010/06/17 HTML / CSS
HTML5到底会有什么发展?HTML5的前景展望
2015/07/07 HTML / CSS
竞选班委演讲稿
2014/04/28 职场文书
高中政治教师教学反思
2016/02/23 职场文书