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使用cookielib库示例分享
Mar 03 Python
python基础教程之对象和类的实际运用
Aug 29 Python
Python简单连接MongoDB数据库的方法
Mar 15 Python
python实现批量图片格式转换
Jun 16 Python
Python实现简单的用户交互方法详解
Sep 25 Python
新年快乐! python实现绚烂的烟花绽放效果
Jan 30 Python
解决python中导入win32com.client出错的问题
Jul 26 Python
python实现知乎高颜值图片爬取
Aug 12 Python
flask框架json数据的拿取和返回操作示例
Nov 28 Python
python exit出错原因整理
Aug 31 Python
python 爬取B站原视频的实例代码
Sep 09 Python
python 可视化库PyG2Plot的使用
Jan 21 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
实用函数9
2007/11/08 PHP
附件名前加网站名
2008/03/23 PHP
PHP获取搜索引擎关键字来源的函数(支持百度和谷歌等搜索引擎)
2012/10/03 PHP
php中使用redis队列操作实例代码
2013/02/07 PHP
PHP数组相加操作及与array_merge的区别浅析
2016/11/26 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
2017/02/15 PHP
PHP编程实现csv文件导入mysql数据库的方法
2017/04/29 PHP
PHP _construct()函数讲解
2019/02/03 PHP
Laravel推荐使用的十个辅助函数
2019/05/10 PHP
用dom+xhtml+css制作的一个相册效果代码打包下载
2008/01/24 Javascript
JavaScript生成随机数的4种自定义函数分享
2015/02/28 Javascript
解决jquery中动态新增的元素节点无法触发事件问题的两种方法
2015/10/30 Javascript
详解JavaScript中常用的函数类型
2015/11/18 Javascript
基于jQuery实现二级下拉菜单效果
2016/02/01 Javascript
解析javascript瀑布流原理实现图片滚动加载
2016/03/10 Javascript
Vue.js每天必学之组件与组件间的通信
2016/09/08 Javascript
jquery动态添加文本并获取值的方法
2016/10/12 Javascript
js控制div层的叠加简单方法
2016/10/15 Javascript
微信小程序自定义toast实现方法详解【附demo源码下载】
2017/11/28 Javascript
微信小程序实现动态设置placeholder提示文字及按钮选中/取消状态的方法
2017/12/14 Javascript
vue-router权限控制(简单方式)
2018/10/29 Javascript
webpack+vue-cil 中proxyTable配置接口地址代理操作
2020/07/18 Javascript
NestJs使用Mongoose对MongoDB操作的方法
2021/02/22 Javascript
python机器学习实战之K均值聚类
2017/12/20 Python
python通过百度地图API获取某地址的经纬度详解
2018/01/28 Python
Python zip()函数用法实例分析
2018/03/17 Python
python中cPickle类使用方法详解
2018/08/27 Python
基于numpy中数组元素的切片复制方法
2018/11/15 Python
Pycharm之快速定位到某行快捷键的方法
2019/01/20 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
2019/05/05 Python
python装饰器使用实例详解
2019/12/14 Python
Python HTMLTestRunner如何下载生成报告
2020/09/04 Python
python opencv实现图像配准与比较
2021/02/09 Python
浅析border-radius如何兼容IE
2016/04/19 HTML / CSS
财产公证书
2014/04/10 职场文书
2016中学教师读书心得体会
2016/01/13 职场文书