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文件夹与文件的操作实现代码
Jul 13 Python
Python下载懒人图库JavaScript特效
May 28 Python
Python入门学习之字符串与比较运算符
Oct 12 Python
Python字符串和字典相关操作的实例详解
Sep 23 Python
urllib和BeautifulSoup爬取维基百科的词条简单实例
Jan 17 Python
Python实现找出数组中第2大数字的方法示例
Mar 26 Python
对TensorFlow的assign赋值用法详解
Jul 30 Python
python+pyqt5实现24点小游戏
Jan 24 Python
python实现比较类的两个instance(对象)是否相等的方法分析
Jun 26 Python
解决Python安装时报缺少DLL问题【两种解决方法】
Jul 15 Python
opencv-python 提取sift特征并匹配的实例
Dec 09 Python
python实现指定ip端口扫描方式
Dec 17 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
业余方法DIY电子管FM收音机
2021/03/02 无线电
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
2014/03/28 PHP
php实现用于计算执行时间的类实例
2015/04/18 PHP
3种php生成唯一id的方法
2015/11/23 PHP
ThinkPHP中类的构造函数_construct()与_initialize()的区别详解
2017/03/13 PHP
浅谈关于PHP解决图片无损压缩的问题
2017/09/01 PHP
php微信开发之关注事件
2018/06/14 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
经典的解除许多网站无法复制文字的绝招
2006/12/31 Javascript
window.dialogArguments 使用说明
2011/04/11 Javascript
JavaScript高级程序设计 读书笔记之十 本地对象Date日期
2012/02/27 Javascript
JS验证控制输入中英文字节长度(input、textarea等)具体实例
2013/06/21 Javascript
谈谈JavaScript自定义回调函数
2015/10/18 Javascript
JS组件Bootstrap ContextMenu右键菜单使用方法
2016/04/17 Javascript
js添加事件的通用方法推荐
2016/05/15 Javascript
JS获取当前使用的浏览器名字以及版本号实现方法
2016/08/19 Javascript
纯前端JavaScript实现Excel IO案例分享
2016/08/26 Javascript
jQuery基本选择器和层次选择器学习使用
2017/02/27 Javascript
nodejs使用async模块同步执行的方法
2019/03/02 NodeJs
微信小程序中转义字符的处理方法
2019/03/28 Javascript
JavaScript 严格模式(use strict)用法实例分析
2020/03/04 Javascript
基于js实现数组相邻元素上移下移
2020/05/19 Javascript
Python中使用OpenCV库来进行简单的气象学遥感影像计算
2016/02/19 Python
python开发环境PyScripter中文乱码问题解决方案
2016/09/11 Python
Python实现的爬取网易动态评论操作示例
2018/06/06 Python
Flask框架配置与调试操作示例
2018/07/23 Python
仿酷狗html5手机音乐播放器主要部分代码
2013/05/15 HTML / CSS
struct与class的区别
2014/02/03 面试题
大学生写自荐信的技巧
2014/01/08 职场文书
小学生学雷锋演讲稿
2014/04/25 职场文书
纪律教育学习月活动总结
2014/08/27 职场文书
高中学生自我评价范文
2014/09/23 职场文书
重阳节慰问信
2015/02/15 职场文书
2015高考寄语集锦
2015/02/27 职场文书
Windows 64位 安装 mysql 8.0.28 图文教程
2022/04/19 MySQL