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 相关文章推荐
35个Python编程小技巧
Apr 01 Python
Python中的对象,方法,类,实例,函数用法分析
Jan 15 Python
使用Python设置tmpfs来加速项目的教程
Apr 17 Python
在Python中处理字符串之isdigit()方法的使用
May 18 Python
Python迭代和迭代器详解
Nov 10 Python
浅谈python中列表、字符串、字典的常用操作
Sep 19 Python
python自动12306抢票软件实现代码
Feb 24 Python
python3第三方爬虫库BeautifulSoup4安装教程
Jun 19 Python
Django多数据库配置及逆向生成model教程
Mar 28 Python
python反爬虫方法的优缺点分析
Nov 25 Python
Python爬虫新手入门之初学lxml库
Dec 20 Python
python munch库的使用解析
May 25 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
新闻分类录入、显示系统
2006/10/09 PHP
php.ini中的request_order推荐设置
2015/05/10 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
2016/11/10 PHP
yii 2.0中表单小部件的使用方法示例
2017/05/23 PHP
javascript sudoku 数独智力游戏生成代码
2010/03/27 Javascript
Javascript在IE下设置innerHTML时出现未知的运行时错误的解决方法
2011/01/12 Javascript
基于jQuery的倒计时实现代码
2012/05/30 Javascript
JS刷新当前页面的几种方法总结
2013/12/24 Javascript
jquery实现鼠标滑过后动态图片提示效果实例
2015/08/10 Javascript
jquery.serialize() 函数语法及简单实例
2016/07/08 Javascript
简单的JS轮播图代码
2016/07/18 Javascript
原生js实现图片放大缩小计时器效果
2017/01/20 Javascript
JS正则表达式验证账号、手机号、电话和邮箱是否合法
2017/03/08 Javascript
JavaScript enum枚举类型定义及使用方法
2020/05/15 Javascript
vue 实现根据data中的属性值来设置不同的样式
2020/08/04 Javascript
python实现的防DDoS脚本
2011/02/08 Python
Python制作数据导入导出工具
2015/07/31 Python
Python编程实现使用线性回归预测数据
2017/12/07 Python
Python:Scrapy框架中Item Pipeline组件使用详解
2017/12/27 Python
python MysqlDb模块安装及其使用详解
2018/02/23 Python
python装饰器深入学习
2018/04/06 Python
win8下python3.4安装和环境配置图文教程
2018/07/31 Python
分享30个新鲜的CSS3打造的精美绚丽效果(附演示下载)
2012/12/28 HTML / CSS
简单介绍CSS3中Media Query的使用
2015/07/07 HTML / CSS
Html5移动端div固定到底部实现底部导航条的几种方式
2021/03/09 HTML / CSS
如何填写个人简历自我评价
2013/12/10 职场文书
服装发布会策划方案
2014/05/22 职场文书
青奥会口号
2014/06/12 职场文书
学校纪律作风整改措施思想汇报
2014/10/11 职场文书
医德医风个人工作总结2014
2014/11/14 职场文书
英文导游词
2015/02/13 职场文书
2015年班主任个人工作总结
2015/03/31 职场文书
闪闪红星观后感
2015/06/08 职场文书
董事会决议范本
2015/07/01 职场文书
反腐倡廉心得体会2016
2016/01/13 职场文书
Redisson实现Redis分布式锁的几种方式
2021/08/07 Redis