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中日期和时间格式化输出的方法小结
Mar 19 Python
给Python初学者的一些编程技巧
Apr 03 Python
Python抓取手机号归属地信息示例代码
Nov 28 Python
Python爬取附近餐馆信息代码示例
Dec 09 Python
python读取和保存视频文件
Apr 16 Python
python多维数组分位数的求取方式
Mar 03 Python
python字符串常用方法及文件简单读写的操作方法
Mar 04 Python
Jupyter notebook 启动闪退问题的解决
Apr 13 Python
python实现最短路径的实例方法
Jul 19 Python
如何使用Python进行PDF图片识别OCR
Jan 22 Python
pytorch损失反向传播后梯度为none的问题
May 12 Python
详解Python中*args和**kwargs的使用
Apr 07 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
Blitz templates 最快的PHP模板引擎
2010/04/06 PHP
PHP命名空间(namespace)的使用基础及示例
2014/08/18 PHP
Aster vs Newbee BO5 第一场2.19
2021/03/10 DOTA
Dreamweaver jQuery智能提示插件,支持版本提示,支持1.6api
2011/07/31 Javascript
node.js中的fs.fchmod方法使用说明
2014/12/16 Javascript
javascript实现日期按月份加减
2015/05/15 Javascript
jQuery检测某个元素是否存在代码分享
2015/07/09 Javascript
jQuery实现带玻璃流光质感的手风琴特效
2015/11/20 Javascript
Highcharts使用简例及异步动态读取数据
2015/12/30 Javascript
Angular 2应用的8个主要构造块有哪些
2016/10/17 Javascript
JavaScript数组基于交换的排序示例【冒泡排序】
2018/07/21 Javascript
如何在vue里添加好看的lottie动画
2018/08/02 Javascript
微信公众号平台接口开发 获取access_token过程解析
2019/08/14 Javascript
通过原生vue添加滚动加载更多功能
2019/11/21 Javascript
基于javascript处理二进制图片流过程详解
2020/06/08 Javascript
Python splitlines使用技巧
2008/09/06 Python
Python列表(list)常用操作方法小结
2015/02/02 Python
Python 多进程并发操作中进程池Pool的实例
2017/11/01 Python
机器学习10大经典算法详解
2017/12/07 Python
Python实现base64编码的图片保存到本地功能示例
2018/06/22 Python
django+echart绘制曲线图的方法示例
2018/11/26 Python
python使用Qt界面以及逻辑实现方法
2019/07/10 Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
2019/08/27 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
2020/01/08 Python
TensorFlow2.0:张量的合并与分割实例
2020/01/19 Python
使用jTopo给Html5 Canva中绘制的元素添加鼠标事件
2014/05/15 HTML / CSS
amaze ui 的使用详细教程
2020/08/19 HTML / CSS
amazeui页面校验功能的实现代码
2020/08/24 HTML / CSS
教师自我评价范文
2013/12/16 职场文书
个人简历自我评价范文
2014/02/04 职场文书
房地产促销活动方案
2014/03/01 职场文书
中学生学雷锋活动心得体会
2014/03/10 职场文书
经济信息系毕业生自荐信范文
2014/03/15 职场文书
个人四风问题整改措施思想汇报
2014/10/04 职场文书
Oracle表空间与权限的深入讲解
2021/11/17 Oracle
MySQL数据库之存储过程 procedure
2022/06/16 MySQL