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使用smtplib模块通过gmail实现邮件发送的方法
May 08 Python
在Django的模型中添加自定义方法的示例
Jul 21 Python
python实现机器人行走效果
Jan 29 Python
python实现对求解最长回文子串的动态规划算法
Jun 02 Python
python远程连接服务器MySQL数据库
Jul 02 Python
Python版名片管理系统
Nov 30 Python
python3实现二叉树的遍历与递归算法解析(小结)
Jul 03 Python
python3 线性回归验证方法
Jul 09 Python
Pandas中DataFrame的分组/分割/合并的实现
Jul 16 Python
Django使用unittest模块进行单元测试过程解析
Aug 02 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
Feb 07 Python
python中JWT用户认证的实现
May 18 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/02/04 PHP
zend optimizer在wamp的基础上安装图文教程
2013/10/26 PHP
php Calender(日历)代码分享
2014/01/03 PHP
初识PHP
2014/09/28 PHP
PHP文件上传操作实例详解
2016/09/27 PHP
许愿墙中用到的函数
2006/10/07 Javascript
JS声明变量背后的编译原理剖析
2012/12/28 Javascript
javascript中的事件代理初探
2014/03/08 Javascript
JavaSciprt中处理字符串之sup()方法的使用教程
2015/06/08 Javascript
jQuery横向擦除焦点图特效代码分享
2015/09/06 Javascript
JS组件Bootstrap实现弹出框和提示框效果代码
2015/12/08 Javascript
微信QQ的二维码登录原理js代码解析
2016/06/23 Javascript
用自定义图片代替原生checkbox实现全选,删除以及提交的方法
2016/10/18 Javascript
使用Ajax与服务器(JSON)通信实例
2016/11/04 Javascript
微信小程序选择图片和放大预览图片功能
2017/11/02 Javascript
微信小程序自定义导航栏(模板化)
2019/11/15 Javascript
微信小程序表单验证WxValidate的使用
2019/11/27 Javascript
javascript实现倒计时提示框
2021/03/02 Javascript
[02:51]DOTA2 2015国际邀请赛中国区预选赛第一日战报
2015/05/27 DOTA
[01:27:30]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python爬取三国演义的实现方法
2016/09/12 Python
python和ruby,我选谁?
2017/09/13 Python
Python中int()函数的用法浅析
2017/10/17 Python
Django的分页器实例(paginator)
2017/12/01 Python
python运用pygame库实现双人弹球小游戏
2019/11/25 Python
基于numpy中的expand_dims函数用法
2019/12/18 Python
浅谈python中频繁的print到底能浪费多长时间
2020/02/21 Python
使用BeautifulSoup4解析XML的方法小结
2020/12/07 Python
工程班组长岗位职责
2013/12/30 职场文书
政协调研汇报材料
2014/08/15 职场文书
聚会通知怎么写
2015/04/23 职场文书
考生诚信考试承诺书
2015/04/29 职场文书
党员读书活动心得体会
2016/01/14 职场文书
导游词之吉林花园山
2019/10/17 职场文书
解决python存数据库速度太慢的问题
2021/04/23 Python
HTML中实现音乐或视频自动播放案例详解
2022/05/30 HTML / CSS