python re库的正则表达式入门学习教程


Posted in Python onMarch 08, 2019

简介

正则表达式本身是一种小型的、高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配。正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行。

下面话不多说了,来一起看看详细的介绍吧

1. 安装

默认已经安装好了python环境了

re库是python3的核心库,不需要pip install,直接import就行

2. 最简单的模式

字符本身就是最简单的模式

比如:'A', 'I love you', 'test'

然是注意在定义模式字符串的时候,在前面加上r,它的作用是告诉编译器,接下来的字符串是单纯的字符串,请不要转变为转义字符。

例子

import re
pattern = r'Cookie'
sequence = 'Cookie'
re.match(pattern, sequence)
<re.Match object; span=(0, 6), match='Cookie'>

re.match()是常用的函数,如果匹配,返回的是re.Match object.一个库内置的对象。如果没有匹配返回的是None

3. 通配符

在正则表达式中,有些字符是有特殊意义的(不是转义字符的那套规则),下面介绍常用的通配符字符

1)".":点,代表任何字符,除了换行(newline)

re.search(r'Co.k.e', 'Cookie').group()

其中group()函数返回匹配的字符,返回类型是str

'Cookie'

2) "\w" 反斜杠小写w,代表任何单个字母,数字,下划线

re.search(r'Co\wk\we', 'Cookie').group()
'Cookie'

3) "\W" 反斜杠大写W,代表任何2)中没有代表的字符

re.search(r'C\Wke', 'C@ke').group()
'C@ke'

4) "\s" 反斜杠小写s,代表一些空格字符,比如空格(space),换行(new line),跳格键(tab),回车(return)

re.search(r'Eat\scake', 'Eat cake').group()
'Eat cake'

5) "\S" 反斜杠大写S,代表任何4)中没有代表的字符

re.search(r'Cook\Se', 'Cookie').group()
'Cookie'

6) "\t" 反斜杠小写t,代表跳格键(tab)

7) "\n" 反斜杠小写t,代表换行(new line)

8) "\r" 反斜杠小写t,代表回车(return)

9) "\d" 反斜杠小写d,代表单个数字0-9

re.search(r'c\d\dkie', 'c00kie').group()
'c00kie'

10) "^" 这个键不知道叫什么,代表从字符开头要匹配

re.search(r'^Eat', 'Eat cake').group()
'Eat'

11) "$" 美元符号,代表从字符结尾要匹配

re.search(r'cake$', 'Eat cake').group()
'cake'

12) "[abc]" 中括号中任意字符,代表匹配其中任意字符

常用的方式,比如[a-zA-Z0-9],或者如果中括号中第一个字符是"^",代表不是这个范围内的字符

re.search(r'Number: [0-6]', 'Number: 5')
<re.Match object; span=(0, 9), match='Number: 5'>

再来个不在范围内的

re.search(r'Number: [^0-6]', 'Number: 7')
<re.Match object; span=(0, 9), match='Number: 7'>

4. 重复

第三部分介绍了单个通配符,那么怎么定义一串通配符呢,利用一些重复的标志

1) "+" 加号,表示在它左边的字符出现一次或者多次

re.search(r'Co+kie', 'Cooookie')
<re.Match object; span=(0, 8), match='Cooookie'>

2) "*" 乘号,表示在它左边的字符出现零次或者多次

re.search(r'Ca*o*kie', 'Caokie').group()
'Caokie'

3) "?" 问号,表示在它左边的字符出现零次或者一次

re.search(r'Colou?r', 'Color').group()
'Color'

4) {x} 大括号加数字,重复确切几次

5) {x,} 重复至少几次

6) {x, y} 重复至少x次,不超过y次

re.search(r'\d{9,10}', '0987654321').group()
'0987654321'

5. 分组

比如说想定义一个email的格式,@之前的是一个规则,之后的是一个规则,那么通过()圆括号来分为两组,分别定义在一个正则表达式中

然后如果满足的话,通过group()函数指定返回哪一组的结果

比如

email_address = 'Please contact us at: support@datacamp.com'
match = re.search(r'([\w+-]+)@([\w\.-]+)', 'tw7613781@gmail.com')
if match:
 print(match.group()) # The whole matched text
 print(match.group(1)) # The username (group 1)
 print(match.group(2)) # The host (group 2)
tw7613781@gmail.com
tw7613781
gmail.com

@前为第一部分,\w代表代表任何单个字母,数字,下划线,上面已经介绍了,然后就是"\w"和"+"和"-"随便哪一个至少一个或者多个

@后为第二部分,其余一样,就是多了个"\.",因为"."代表的是任意字符了,如果想表达真正的点,用"\."来表示。

6. python库函数re的常用函数

1) re.search(pattern, string)和re.match(pattern, string)

区别在于search能从string中寻找任何满足pattern的substring,但是match必须从头开始

pattern = "cookie"
sequence = "Cake and cookie"

re.search(pattern, sequence).group()
'cookie'

如果是match会返回None

2) re.findall(pattern, string)

寻找string所有满足pattern的substring,然后以list的形式返回

email_address = "Please contact us at: support@datacamp.com, xyz@datacamp.com"

#'addresses' is a list that stores all the possible match
addresses = re.findall(r'[\w\.-]+@[\w\.-]+', email_address)
for address in addresses: 
 print(address)
support@datacamp.com
xyz@datacamp.com

3) re.compile(pattern)

通过compile函数会生成一个pattern对象,这个pattern对象可以直接使用match,search等函数

In: pattern = re.compile(r"cookie")
In: pattern
Out: re.compile(r'cookie', re.UNICODE)
In: pattern.search('cookie')
Out: <re.Match object; span=(0, 6), match='cookie'>

学习材料

https://www.datacamp.com/community/tutorials/python-regular-expression-tutorial

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python使用mysqldb连接数据库操作方法示例详解
Dec 03 Python
简单介绍Python中的len()函数的使用
Apr 07 Python
python进程管理工具supervisor的安装与使用教程
Sep 05 Python
python合并已经存在的sheet数据到新sheet的方法
Dec 11 Python
Python对象转换为json的方法步骤
Apr 25 Python
python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例
Jun 17 Python
Pytorch卷积层手动初始化权值的实例
Aug 17 Python
Python类中的魔法方法之 __slots__原理解析
Aug 26 Python
Python FFT合成波形的实例
Dec 04 Python
django API 中接口的互相调用实例
Apr 01 Python
用Python制作音乐海报
Jan 26 Python
Python编程编写完善的命令行工具
Sep 15 Python
opencv与numpy的图像基本操作
Mar 08 #Python
Python脚本修改阿里云的访问控制列表的方法
Mar 08 #Python
python实现整数的二进制循环移位
Mar 08 #Python
Python3实现的反转单链表算法示例
Mar 08 #Python
Python3实现的判断回文链表算法示例
Mar 08 #Python
python字符串循环左移
Mar 08 #Python
详解Python Matplot中文显示完美解决方案
Mar 07 #Python
You might like
PHP+.htaccess实现全站静态HTML文件GZIP压缩传输(一)
2007/02/15 PHP
php设计模式 State (状态模式)
2011/06/26 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
Laravel框架自定义公共函数的引入操作示例
2019/04/16 PHP
Javascript 构造函数,公有,私有特权和静态成员定义方法
2009/11/30 Javascript
JavaScript性能陷阱小结(附实例说明)
2010/12/28 Javascript
extjs中grid中嵌入动态combobox的应用
2011/01/01 Javascript
JavaScript执行效率与性能提升方案
2012/12/21 Javascript
jquery实现的图片点击滚动效果
2014/04/29 Javascript
JavaScript日期时间与时间戳的转换函数分享
2015/01/31 Javascript
JavaScript使用setInterval()函数实现简单轮询操作的方法
2015/02/02 Javascript
javascript清空table表格的方法
2015/05/14 Javascript
AngularJS 依赖注入详解及示例代码
2016/08/17 Javascript
Node.js的Koa实现JWT用户认证方法
2018/05/05 Javascript
vue使用监听实现全选反选功能
2018/07/06 Javascript
使用jquery模拟a标签的click事件无法实现跳转的解决
2018/12/04 jQuery
小程序封装路由文件和路由方法(5种全解析)
2019/05/26 Javascript
在vue-cli 3中给stylus、sass样式传入共享的全局变量
2019/08/12 Javascript
Vue.js实现立体计算器
2020/02/22 Javascript
JS端基于download.js实现图片、视频时直接下载而不是打开预览
2020/05/09 Javascript
Python 中迭代器与生成器实例详解
2017/03/29 Python
Python 机器学习库 NumPy入门教程
2018/04/19 Python
Python实现链表反转的方法分析【迭代法与递归法】
2020/02/22 Python
Python过滤序列元素的方法
2020/07/31 Python
scrapy头部修改的方法详解
2020/12/06 Python
详解pandas apply 并行处理的几种方法
2021/02/24 Python
css3实现书本翻页效果的示例代码
2021/03/08 HTML / CSS
美国顶级品牌男士大码服装店:DXL
2017/08/30 全球购物
日本最大的购物网站乐天市场国际版:Rakuten Global Market(支持中文)
2020/02/03 全球购物
母亲七十大寿答谢词
2014/01/18 职场文书
操行评语大全
2014/04/30 职场文书
阅兵口号
2014/06/19 职场文书
部门活动策划方案
2014/08/16 职场文书
初中学校对照检查材料
2014/08/19 职场文书
就业协议书盖章的注意事项
2014/09/28 职场文书
详解CSS开发过程中的20个快速提升技巧
2021/05/21 HTML / CSS