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 multiprocessing.Manager介绍和实例(进程间共享数据)
Nov 21 Python
Python 多线程的实例详解
Sep 07 Python
Python列表与元组的异同详解
Jul 02 Python
Python hashlib模块实例使用详解
Dec 24 Python
python 非线性规划方式(scipy.optimize.minimize)
Feb 11 Python
python中threading开启关闭线程操作
May 02 Python
PyTorch-GPU加速实例
Jun 23 Python
python线性插值解析
Jul 05 Python
jupyter notebook更换皮肤主题的实现
Jan 07 Python
pandas apply使用多列计算生成新的列实现示例
Feb 24 Python
python 指定源路径来解决import问题的操作
Mar 04 Python
Python基础之教你怎么在M1系统上使用pandas
May 08 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错误和异长常处理总结
2014/03/06 PHP
php把字符串指定字符分割成数组的方法
2018/03/12 PHP
Bootstrap+PHP实现多图上传功能实例详解
2018/04/08 PHP
聊聊 PHP 8 新特性 Attributes
2020/08/19 PHP
使用jquery为table动态添加行的实现代码
2011/03/30 Javascript
in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案
2011/07/26 Javascript
解决Extjs 4 Panel作为Window组件的子组件时出现双重边框问题
2013/01/11 Javascript
通过javascript获取iframe里的值示例代码
2013/06/24 Javascript
jQuery中的编程范式详解
2014/12/15 Javascript
js读取csv文件并使用json显示出来
2015/01/09 Javascript
Javascript基础教程之while语句
2015/01/18 Javascript
js实现屏幕自适应局部代码分享
2015/01/30 Javascript
JavaScript判断用户是否对表单进行了修改的方法
2015/03/18 Javascript
Javascript之Math对象详解
2016/06/07 Javascript
浅谈JavaScript for循环 闭包
2016/06/22 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(一)
2017/05/11 Javascript
利用Jasmine对Angular进行单元测试的方法详解
2017/06/12 Javascript
JS使用ActiveXObject实现用户提交表单时屏蔽敏感词功能
2017/06/20 Javascript
anime.js 实现带有描边动画效果的复选框(推荐)
2017/12/24 Javascript
Vue 过滤器filters及基本用法
2017/12/26 Javascript
[02:02]2018DOTA2亚洲邀请赛Mineski赛前采访
2018/04/04 DOTA
Python语言技巧之三元运算符使用介绍
2013/03/04 Python
Python 3.6 读取并操作文件内容的实例
2018/04/23 Python
Python判断以什么结尾以什么开头的实例
2018/10/27 Python
基于django ManyToMany 使用的注意事项详解
2019/08/09 Python
python图片剪裁代码(图片按四个点坐标剪裁)
2020/03/10 Python
Python Http请求json解析库用法解析
2020/11/28 Python
python实现马丁策略的实例详解
2021/01/15 Python
水果花束:Fruit Bouquets
2017/12/20 全球购物
支票、地址标签、包装纸和慰问卡:Current Catalog
2018/01/30 全球购物
幼儿运动会邀请函
2014/01/17 职场文书
交通事故委托书范本
2014/09/28 职场文书
交通事故赔偿协议书
2014/10/16 职场文书
银行求职信范文怎么写
2015/03/20 职场文书
如何利用STAR法则制作留学文书?
2019/08/26 职场文书
Github 使用python对copilot做些简单使用测试
2022/04/14 Python