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设计模式之中介模式简单示例
Jan 09 Python
浅谈python numpy中nonzero()的用法
Apr 02 Python
win7+Python3.5下scrapy的安装方法
Jul 31 Python
python找出完数的方法
Nov 12 Python
Python线程池模块ThreadPoolExecutor用法分析
Dec 28 Python
python将处理好的图像保存到指定目录下的方法
Jan 10 Python
详解python中的index函数用法
Aug 06 Python
Python编程中类与类的关系详解
Aug 08 Python
Python 寻找局部最高点的实现
Dec 05 Python
Python操作MySQL数据库实例详解【安装、连接、增删改查等】
Jan 17 Python
Python递归及尾递归优化操作实例分析
Feb 01 Python
Python Tornado之跨域请求与Options请求方式
Mar 28 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微信开发之微信录音临时转永久存储
2018/01/26 PHP
php插入mysql数据返回id的方法
2018/05/31 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
2018/08/21 PHP
js 小贴士一星期合集
2010/04/07 Javascript
JavaScript聚焦于第一个字段的代码
2010/10/15 Javascript
js变量以及其作用域详解
2020/07/18 Javascript
JS实现随机化快速排序的实例代码
2013/08/01 Javascript
jquery live()调用不存在的解决方法
2014/02/26 Javascript
如何用JS/HTML将时间戳转换为“xx天前”的形式
2017/02/06 Javascript
用vue和node写的简易购物车实现
2017/04/25 Javascript
nodejs调取微信收货地址的方法
2017/12/20 NodeJs
基于Vue的ajax公共方法(详解)
2018/01/20 Javascript
基于vue.js实现的分页
2018/03/13 Javascript
使用vue点击li,获取当前点击li父辈元素的属性值方法
2018/09/12 Javascript
angular4强制刷新视图的方法
2018/10/09 Javascript
javascript数组去重方法总结(推荐)
2019/03/20 Javascript
Vue将页面导出为图片或者PDF
2020/08/17 Javascript
解决vue打包后vendor.js文件过大问题
2019/07/03 Javascript
vue不操作dom实现图片轮播的示例代码
2019/12/18 Javascript
详解JavaScript类型判断的四种方法
2020/10/21 Javascript
微信小程序实现简单的select下拉框
2020/11/23 Javascript
Python牛刀小试密码爆破
2011/02/03 Python
python比较2个xml内容的方法
2015/05/11 Python
python统计多维数组的行数和列数实例
2018/06/23 Python
Django前后端分离csrf token获取方式
2020/12/25 Python
CSS3利用text-shadow属性实现多种效果的文字样式展现方法
2016/08/25 HTML / CSS
美国山地自行车、露营、户外装备和服装购物网站:Aventuron
2018/05/05 全球购物
Yummie官方网站:塑身衣和衣柜必需品
2019/10/29 全球购物
奥巴马演讲稿
2014/01/08 职场文书
妈妈的账单教学反思
2014/02/06 职场文书
求职意向书
2014/04/01 职场文书
十一国庆节“向国旗敬礼”主题班会活动方案
2014/09/27 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
求职信:求职应该注意的问题
2019/04/24 职场文书
升职感谢领导的话语及升职感谢信
2019/06/24 职场文书
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
2021/05/06 MySQL