Python正则表达式教程之一:基础篇


Posted in Python onMarch 02, 2017

前言

之前有人提了一个需求,我一看此需求用正则表达式最合适不过。考虑到之前每次使用正则表达式,都是临时抱佛脚,于是这次我就一边完成任务一边系统的学习了一遍正则表达式。主要参考PyCon2016上的一个视频Regular Expressions。

我将分几篇文章对正则表达式进行总结。

以下是第一部分,基础: 

基础部分

这里总结了正则表达式最基础的用法,其中大部分内容对我(以及大部分程序员)来说都是平时经常用到的,所以我就一笔带过了,只对其中的几处用例子说明。 

     .           除了换行之外的其他所有字符

     ^           行首

     $           行尾

     [abcd]      abcd其中的一个字符

     [^abcd]     除了abcd之外的任意字符

     [a-d]       相当于[abcd]

     [a-dz]      相当于[abcdz]

     \b          单词边界

     \w          字母数字或下划线 相当于[a-zA-Z0-9_]

     \W          与\w相反

     \d          数字,相当于[0-9]

     \D          与\d相反

     \s          空白字符,相当于[ \t\n\r\f\v]

     \S          与\s相反

     {5}         在此之前的正则表达式部分(下同)准确的出现5次

     {2,5}       ~出现2到5次

     {2,}        ~出现2次或多次

     {,5}        ~出现0到5次

     *          ~出现0次或多次

     ?          ~出现0次或1次

     +           ~出现1次或多次

     ABC|DEF     匹配ABC或者DEF

     \          转义字符,如\表示匹配*,\$表示匹配$* 

\b、 \用以下几个例子简单说明一下: 

     \b:

>>> re.search(r'\bhello\b', 'hello')
<_sre.SRE_Match object; span=(0, 5), match='hello'>
>>> re.search(r'\bhello\b', 'hello world')
<_sre.SRE_Match object; span=(0, 5), match='hello'>
>>> re.search(r'\bhello\b', 'hello,world')
<_sre.SRE_Match object; span=(0, 5), match='hello'>
>>> re.search(r'\bhello\b', 'hello_world') 
>>>

其实这里,\b大体上和\W一支,但是\b可以匹配行首行尾等非显示类的字符,而\W不可以。 

     \:

>>> re.search(r'\$100', '$100')
<_sre.SRE_Match object; span=(0, 4), match='$100'>
>>> re.search(r'$100', '$100') 
>>>

想要匹配那些在正则表达式中有特殊含义的字符,如$、^、*等,就需要用\进行转义。 

raw string:

另外,前面例子中,模式字符串(pattern)前面都加了一个r,这个r的意思是raw string,后面所接的字符串,Pyhton解释器无需对其进行转义。因为,\在Python字符串中和正则表达式中都有特殊含义,所以如果不是raw string,那么要表达一个\字符,就需要四个\了(在Python解释器中先转义一次,2个\表示1个\,剩下2个\,在正则表达式中又转义一次,最终剩下一个\)。例如:

>>> re.search(r'\bhello\b', 'hello')
<_sre.SRE_Match object; span=(0, 5), match='hello'>
>>> re.search('\bhello\b', 'hello') 
>>> re.search('\\bhello\\b', 'hello')
<_sre.SRE_Match object; span=(0, 5), match='hello'>

>>> re.search('\\\\hello\\\\', '\\hello\\') 
<_sre.SRE_Match object; span=(0, 7), match='\\hello\\'>
>>> re.search(r'\\hello\\', '\\hello\\') 
<_sre.SRE_Match object; span=(0, 7), match='\\hello\\'>
>>> print('\\hello\\')
\hello\

总结

以上就是关于Python正则表达式之基础的全部内容了,有了这些知识,正则表达式的基本运用就没什么问题了。对于一些特殊情况,还需要掌握另外一些高级用法,敬请期待后续文章。希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,如果有疑问大家可以留言交流。

Python 相关文章推荐
Python多线程编程(二):启动线程的两种方法
Apr 05 Python
Python实现扩展内置类型的方法分析
Oct 16 Python
python实现根据文件关键字进行切分为多个文件的示例
Dec 10 Python
对python 读取线的shp文件实例详解
Dec 22 Python
Python批量生成特定尺寸图片及图画任意文字的实例
Jan 30 Python
django使用django-apscheduler 实现定时任务的例子
Jul 20 Python
基于python二叉树的构造和打印例子
Aug 09 Python
Python hashlib模块实例使用详解
Dec 24 Python
Python hmac模块使用实例解析
Dec 24 Python
Python读取二进制文件代码方法解析
Jun 22 Python
Python爬虫实现selenium处理iframe作用域问题
Jan 27 Python
使用Python封装excel操作指南
Jan 29 Python
Python单例模式实例详解
Mar 01 #Python
python实现字典(dict)和字符串(string)的相互转换方法
Mar 01 #Python
python 截取 取出一部分的字符串方法
Mar 01 #Python
详解Python中的静态方法与类成员方法
Feb 28 #Python
python基于itchat实现微信群消息同步机器人
Feb 27 #Python
不要用强制方法杀掉python线程
Feb 26 #Python
Python实现 多进程导入CSV数据到 MySQL
Feb 26 #Python
You might like
理解PHP5中static和const关键字的区别
2007/03/19 PHP
基于PHP中的常用函数回顾
2013/07/11 PHP
PHP5中GD库生成图形验证码(有汉字)
2013/07/28 PHP
Javascript学习笔记 delete运算符
2011/09/13 Javascript
简单选项卡 js和jquery制作方法分享
2014/02/26 Javascript
Javascript中使用A标签获取当前目录的绝对路径方法
2015/03/02 Javascript
JavaScript中this的9种应用场景及三种复合应用场景
2015/09/12 Javascript
详解JavaScript的回调函数
2015/11/20 Javascript
基于jquery实现瀑布流布局
2020/06/28 Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
2016/03/17 Javascript
ES6新特性之变量和字符串用法示例
2017/04/01 Javascript
nodejs个人博客开发第四步 数据模型
2017/04/12 NodeJs
深入理解nodejs中Express的中间件
2017/05/19 NodeJs
基于ExtJs在页面上window再调用Window的事件处理方法
2017/07/26 Javascript
基于angular-utils-ui-breadcrumbs使用心得(分享)
2017/11/03 Javascript
jQuery封装animate.css的实例
2018/01/04 jQuery
js实现随机数小游戏
2019/06/28 Javascript
vue-router的钩子函数用法实例分析
2019/10/26 Javascript
[02:42]决战东方!DOTA2亚洲邀请赛重启荣耀之争
2017/03/17 DOTA
[36:33]完美世界DOTA2联赛循环赛 Matador vs Forest 第一场 11.06
2020/11/06 DOTA
Python中使用 Selenium 实现网页截图实例
2014/07/18 Python
使用django-guardian实现django-admin的行级权限控制的方法
2018/10/30 Python
Pycharm配置远程调试的方法步骤
2018/12/17 Python
GDAL 矢量属性数据修改方式(python)
2020/03/10 Python
土耳其时尚购物网站:Morhipo
2017/09/04 全球购物
捷克鲜花配送:Florea.cz
2018/10/29 全球购物
新加坡领先的在线生活方式和杂货购物网站:EAMART
2019/04/02 全球购物
Camille Jewelry官网:现代女性时尚首饰
2019/07/07 全球购物
2014年学习雷锋活动总结
2014/03/01 职场文书
建筑设计专业求职自我评价
2014/03/02 职场文书
党建工作经验交流材料
2014/05/25 职场文书
项目经理任命书
2014/06/04 职场文书
绿色环保家庭事迹材料
2014/08/31 职场文书
公司的门卫岗位职责
2014/09/09 职场文书
幼儿园端午节活动总结
2015/05/05 职场文书
浅谈GO中的Channel以及死锁的造成
2022/03/18 Golang