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发送邮件实例讲解(python发邮件附件可以使用email模块实现)
Dec 03 Python
通过5个知识点轻松搞定Python的作用域
Sep 09 Python
用生成器来改写直接返回列表的函数方法
May 25 Python
Python3调用微信企业号API发送文本消息代码示例
Nov 10 Python
python计算两个矩形框重合百分比的实例
Nov 07 Python
Python面向对象之类和实例用法分析
Jun 08 Python
Django models.py应用实现过程详解
Jul 29 Python
python 已知三条边求三角形的角度案例
Apr 12 Python
Python3 selenium 实现QQ群接龙自动化功能
Apr 17 Python
在pycharm中创建django项目的示例代码
May 28 Python
Python调用C语言程序方法解析
Jul 07 Python
Python中tkinter的用户登录管理的实现
Apr 22 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
日本十大最佳动漫,全都是二次元的神级作品
2019/10/05 日漫
Oracle 常见问题解答
2006/10/09 PHP
浅析php中抽象类和接口的概念以及区别
2013/06/27 PHP
php实现天干地支计算器示例
2014/03/14 PHP
一个显示效果非常不错的PHP错误、异常处理类
2014/03/21 PHP
PHP实现ftp上传文件示例
2014/08/21 PHP
PHP基本语法总结
2014/09/06 PHP
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
2014/10/27 PHP
php安装swoole扩展的方法
2015/03/19 PHP
php 5.4 全新的代码复用Trait详解
2017/01/05 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
取得窗口大小 兼容所有浏览器的js代码
2011/08/09 Javascript
js函数中onmousedown和onclick的区别和联系探讨
2013/05/19 Javascript
js封装可使用的构造函数继承用法分析
2015/01/28 Javascript
使用JavaScript 实现的人脸检测
2015/03/24 Javascript
javascript的列表切换【实现代码】
2016/05/03 Javascript
总结Node.js中的一些错误类型
2016/08/15 Javascript
JavaScript事件用法浅析
2016/10/31 Javascript
jQuery展示表格点击变色、全选、删除
2017/01/05 Javascript
vue 中自定义指令改变data中的值
2017/06/02 Javascript
Angular5中调用第三方js插件的方法
2018/02/26 Javascript
node.js中express模块创建服务器和http模块客户端发请求
2019/03/06 Javascript
jquery登录的异步验证操作示例
2019/05/09 jQuery
[01:54]胎教DOTA2 准妈妈玩家现身中国区预选赛
2016/06/26 DOTA
Scrapy-redis爬虫分布式爬取的分析和实现
2017/02/07 Python
python验证码识别的示例代码
2017/09/21 Python
selenium+PhantomJS爬取豆瓣读书
2019/08/26 Python
python 获取计算机的网卡信息
2021/02/18 Python
Python使用tkinter实现小时钟效果
2021/02/22 Python
html5定制表单_动力节点Java学院整理
2017/07/11 HTML / CSS
后进生转化工作制度
2014/01/17 职场文书
放飞理想演讲稿
2014/09/09 职场文书
2015年高一班主任工作总结
2015/05/13 职场文书
鲁滨逊漂流记读书笔记
2015/06/26 职场文书
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
2021/06/21 Java/Android
Python编写nmap扫描工具
2021/07/21 Python