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数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
Sep 28 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
Oct 21 Python
对Python中小整数对象池和大整数对象池的使用详解
Jul 09 Python
Django分页功能的实现代码详解
Jul 29 Python
Django中URL的参数传递的实现
Aug 04 Python
python自动发微信监控报警
Sep 06 Python
TensorFlow2.0矩阵与向量的加减乘实例
Feb 07 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
Jul 07 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
Sep 17 Python
python打包生成so文件的实现
Oct 30 Python
健身房被搭讪?用python写了个小米计时器助人为乐
Jun 08 Python
python基础之模块的导入
Oct 24 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
overlord人气高涨,却被菲利普频繁举报,第四季很难在国内上映
2020/05/06 日漫
PHP运行模式的深入理解
2013/06/03 PHP
ThinkPHP的截取字符串函数无法显示省略号的解决方法
2014/06/25 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
2016/12/08 PHP
PHP7扩展开发教程之Hello World实现方法示例
2017/08/03 PHP
用jquery ajax获取网站Alexa排名的代码
2009/12/12 Javascript
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之二
2011/12/31 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
jquery 插件学习(一)
2012/08/06 Javascript
javascript变量作用域使用中常见错误总结
2013/03/26 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
2013/10/24 Javascript
javascript模拟实现C# String.format函数功能代码
2013/11/25 Javascript
浅谈JSON中stringify 函数、toJosn函数和parse函数
2015/01/26 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
2015/09/18 Javascript
jquery实现列表上下移动功能
2016/02/25 Javascript
AngularJs自定义服务之实现签名和加密
2016/08/02 Javascript
JS优化与惰性载入函数实例分析
2017/04/06 Javascript
jquery动态赋值id与动态取id方法示例
2017/08/21 jQuery
vue 实现路由跳转时更改页面title
2019/11/05 Javascript
vue中英文切换实例代码
2020/01/21 Javascript
使用django-suit为django 1.7 admin后台添加模板
2014/11/18 Python
Python抓取电影天堂电影信息的代码
2016/04/07 Python
python dict 相同key 合并value的实例
2019/01/21 Python
浅谈Python小波分析库Pywavelets的一点使用心得
2019/07/09 Python
Python:type、object、class与内置类型实例
2019/12/25 Python
Python3实现mysql连接和数据框的形成(实例代码)
2020/01/17 Python
Python通用唯一标识符uuid模块使用案例
2020/09/10 Python
CSS3实现的文本3D效果附图
2014/09/03 HTML / CSS
英国蜡烛、蜡烛配件和家居香氛购买网站:Yankee Candle
2018/12/12 全球购物
英国著名的美容护肤和护发产品购物网站:Lookfantastic
2020/11/23 全球购物
中专毕业生的自我鉴定
2013/12/01 职场文书
应届毕业生个人求职信范文
2014/01/29 职场文书
《三顾茅庐》教学反思
2014/04/10 职场文书
我的中国梦主题班会
2015/08/14 职场文书
安装pytorch时报sslerror错误的解决方案
2021/05/17 Python
Win11显卡控制面板打开显卡设置方法
2022/04/20 数码科技