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读取键盘输入的2种方法
Jun 16 Python
Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
Jul 02 Python
python leetcode 字符串相乘实例详解
Sep 03 Python
Python import与from import使用及区别介绍
Sep 06 Python
详解python中Numpy的属性与创建矩阵
Sep 10 Python
python for循环输入一个矩阵的实例
Nov 14 Python
python使用xlrd模块读取xlsx文件中的ip方法
Jan 11 Python
ActiveMQ:使用Python访问ActiveMQ的方法
Jan 30 Python
Django 5种类型Session使用方法解析
Apr 29 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
Dec 28 Python
Python连接Postgres/Mysql/Mongo数据库基本操作大全
Jun 29 Python
Python turtle编写简单的球类小游戏
Mar 31 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实现多维数组中每个单元值(数字)翻倍的方法
2015/02/16 PHP
JavaScript ECMA-262-3 深入解析.第三章.this
2011/09/28 Javascript
JS中window.open全屏命令解析及使用示例
2013/12/11 Javascript
JavaScript中的Web worker多线程API研究
2014/12/06 Javascript
javascript数据类型示例分享
2015/01/19 Javascript
详解JavaScript中this关键字的用法
2016/05/26 Javascript
bootstrap table 表格中增加下拉菜单末行出现滚动条的快速解决方法
2017/01/05 Javascript
AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
2017/01/19 Javascript
关于jQuery EasyUI 中刷新Tab选项卡后一个页面变形的解决方法
2017/03/02 Javascript
BootStrap实现文件上传并带有进度条效果
2017/09/11 Javascript
JS去掉字符串中所有的逗号
2017/10/18 Javascript
微信小程序云开发如何使用npm安装依赖
2019/05/18 Javascript
利用node 判断打开的是文件 还是 文件夹的实例
2019/06/10 Javascript
layUI实现三级导航菜单效果
2019/07/26 Javascript
JavaScript实现抖音罗盘时钟
2019/10/11 Javascript
vue实现Input输入框模糊查询方法
2021/01/29 Javascript
Json实现传值到后台代码实例
2020/06/30 Javascript
Python中的数据对象持久化存储模块pickle的使用示例
2016/03/03 Python
浅析使用Python操作文件
2017/07/31 Python
Sanic框架安装与简单入门示例
2018/07/16 Python
利用python修改json文件的value方法
2018/12/31 Python
python 实现将list转成字符串,中间用空格隔开
2019/12/25 Python
浅谈Python访问MySQL的正确姿势
2020/01/07 Python
PyQt5多线程防卡死和多窗口用法的实现
2020/09/15 Python
4款Python 类型检查工具,你选择哪个呢?
2020/10/30 Python
美国礼品卡商城: Gift Card Mall
2017/08/25 全球购物
电大毕业个人生自我鉴定
2014/03/26 职场文书
调研座谈会发言材料
2014/08/23 职场文书
小学运动会演讲稿
2014/08/25 职场文书
党员先进性教育整改措施
2014/09/18 职场文书
2014年党建工作汇报材料
2014/11/02 职场文书
2015年元旦晚会活动总结(学生会)
2014/11/28 职场文书
项目备案申请报告
2015/05/15 职场文书
聘任协议书(挂靠)
2015/09/21 职场文书
初中历史教学反思
2016/02/19 职场文书
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL