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类参数self使用示例
Feb 17 Python
Python本地与全局命名空间用法实例
Jun 16 Python
对Python进行数据分析_关于Package的安装问题
May 22 Python
python os用法总结
Jun 08 Python
对python_discover方法遍历所有执行的用例详解
Feb 13 Python
在PYQT5中QscrollArea(滚动条)的使用方法
Jun 14 Python
Python 下载及安装详细步骤
Nov 04 Python
python实现宿舍管理系统
Nov 22 Python
Django 解决阿里云部署同步数据库报错的问题
May 14 Python
Python word文本自动化操作实现方法解析
Nov 05 Python
python代码实现猜拳小游戏
Nov 30 Python
如何使用Python对NetCDF数据做空间相关分析
Apr 21 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 email邮箱正则
2008/10/08 PHP
一个php导出oracle库的php代码
2009/04/20 PHP
防止本地用户用fsockopen DDOS攻击对策
2011/11/02 PHP
详解laravel安装使用Passport(Api认证)
2018/07/27 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
2019/09/02 PHP
jquery怎样实现ajax联动框(一)
2013/03/08 Javascript
js获取url中指定参数值的示例代码
2013/12/14 Javascript
JS动态加载当前时间的方法
2015/02/09 Javascript
纯JS实现旋转图片3D展示效果
2015/04/12 Javascript
js 定位到某个锚点的方法
2016/11/19 Javascript
vue返回上一页面时回到原先滚动的位置的方法
2018/12/20 Javascript
ES6的解构赋值实例详解
2019/05/06 Javascript
JS画布动态实现黑客帝国背景效果
2020/11/08 Javascript
JS闭包原理及其使用场景解析
2020/12/03 Javascript
[04:10]DOTA2英雄梦之声_第11期_圣堂刺客
2014/06/21 DOTA
用Python脚本生成Android SALT扰码的方法
2013/09/18 Python
Python3基础之函数用法
2014/08/13 Python
python中的五种异常处理机制介绍
2014/09/02 Python
Python解析excel文件存入sqlite数据库的方法
2016/11/15 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
2018/04/20 Python
python使用turtle绘制分形树
2018/06/22 Python
Python 中字符串拼接的多种方法
2018/07/30 Python
pyhanlp安装介绍和简单应用
2019/02/22 Python
Python爬虫爬取百度搜索内容代码实例
2020/06/05 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
2020/07/18 Python
CSS3 please 跨浏览器的CSS3产生器
2010/03/14 HTML / CSS
canvas如何绘制钟表的方法
2017/12/13 HTML / CSS
客房主管岗位职责
2013/12/09 职场文书
淘宝客服自我总结鉴定
2014/01/25 职场文书
户外活动总结范文
2014/04/30 职场文书
2014年重阳节敬老活动方案
2014/09/16 职场文书
个人三严三实对照检查材料思想汇报
2014/09/22 职场文书
乌镇导游词
2015/02/02 职场文书
企业宣传语大全
2015/07/13 职场文书
FFmpeg视频处理入门教程(新手必看)
2022/01/22 杂记
Java 轮询锁使用时遇到问题
2022/05/11 Java/Android