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实现在Linux系统下更改当前进程运行用户
Feb 04 Python
举例区分Python中的浅复制与深复制
Jul 02 Python
改进Django中的表单的简单方法
Jul 17 Python
Python数组定义方法
Apr 13 Python
python二分查找算法的递归实现方法
May 12 Python
python使用sqlite3时游标使用方法
Mar 13 Python
Python Selenium Cookie 绕过验证码实现登录示例代码
Apr 10 Python
python paramiko利用sftp上传目录到远程的实例
Jan 03 Python
Django REST framework视图的用法
Jan 16 Python
在Python中通过getattr获取对象引用的方法
Jan 21 Python
六行python代码的爱心曲线详解
May 17 Python
实例代码讲解Python 线程池
Aug 24 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
PHP入门学习的几个不错的实例代码
2008/07/13 PHP
浅谈php中mysql与mysqli的区别分析
2013/06/10 PHP
JS获取节点的兄弟,父级,子级元素的方法
2014/01/09 Javascript
js实现ifram取父窗口URL地址的方法
2015/02/09 Javascript
JS与Ajax Get和Post在使用上的区别实例详解
2016/06/08 Javascript
简单理解vue中Props属性
2016/10/27 Javascript
js仿QQ邮箱收件人选择与搜索功能
2017/02/10 Javascript
Vue.js之slot深度复制详解
2017/03/10 Javascript
Vue生命周期示例详解
2017/04/12 Javascript
[01:03:27]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python/sympy求解矩阵方程的方法
2018/11/08 Python
python 实现12bit灰度图像映射到8bit显示的方法
2019/07/08 Python
Python 实现数据结构-循环队列的操作方法
2019/07/17 Python
Python环境Pillow( PIL )图像处理工具使用解析
2019/09/12 Python
pygame库实现俄罗斯方块小游戏
2019/10/29 Python
python3通过qq邮箱发送邮件以及附件
2020/05/20 Python
python中turtle库的简单使用教程
2020/11/11 Python
HTML5的结构和语义(5):交互
2008/10/17 HTML / CSS
独特的礼品和创新的科技产品:The Grommet
2018/02/24 全球购物
美国五金商店:Ace Hardware
2018/03/27 全球购物
澳大利亚先进的皮肤和激光诊所购物网站:Soho Skincare
2018/10/15 全球购物
乌克兰珠宝大卖场:Zlato.ua
2020/09/27 全球购物
莫斯科珠宝厂官方网站:Miuz
2020/09/19 全球购物
公务员综合考察材料
2014/02/01 职场文书
群众路线剖析材料
2014/02/02 职场文书
美术国培研修感言
2014/02/12 职场文书
家长对学生的评语
2014/04/18 职场文书
经济信息系毕业生自荐信
2014/06/02 职场文书
管理工程专业求职信
2014/08/10 职场文书
标准大学生职业生涯规划书写作指南
2014/09/18 职场文书
个人四风对照检查材料
2014/09/26 职场文书
党支部对转正的意见
2015/06/02 职场文书
毕业生自我鉴定范文
2019/05/13 职场文书
Python Flask请求扩展与中间件相关知识总结
2021/06/11 Python
零基础学java之循环语句的使用
2022/04/10 Java/Android
vue.js 使用原生js实现轮播图
2022/04/26 Vue.js