python re库的正则表达式学习笔记
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}', '').group()
''
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 re库的正则表达式学习笔记的更多相关文章
- Python 日期时间处理模块学习笔记
来自:标点符的<Python 日期时间处理模块学习笔记> Python的时间处理模块在日常的使用中用的不是非常的多,但是使用的时候基本上都是要查资料,还是有些麻烦的,梳理下,便于以后方便的 ...
- JavaScript正则表达式学习笔记(二) - 打怪升级
本文接上篇,基础部分相对薄弱的同学请移步<JavaScript正则表达式学习笔记(一) - 理论基础>.上文介绍了8种JavaScript正则表达式的属性,本文还会追加介绍几种JavaSc ...
- python实用库:PrettyTable 学习
python实用库:PrettyTable 学习 PrettyTable说明 PrettyTable 是python中的一个第三方库,可用来生成美观的ASCII格式的表格,十分实用. 以下为官方介绍: ...
- 《Think Python》第17章学习笔记
目录 <Think Python>第17章学习笔记 17.1 面向对象的特性(Object-oriented features) 17.2 打印对象(Printing objects) 1 ...
- 《Think Python》第16章学习笔记
目录 <Think Python>第16章学习笔记 16.1 Time 16.2 纯函数(Pure functions) 16.3 修改器(Modifiers) 16.4 原型 vs. 方 ...
- 《Think Python》第15章学习笔记
目录 <Think Python>第15章学习笔记 15.1 程序员定义的类型(Programmer-defined types) 15.2 属性(Attributes) 15.3 矩形( ...
- javascript正则表达式 - 学习笔记
JavaScript 正则表达式 学习笔记 标签(空格分隔): 基础 JavaScript 正则表达式是用于匹配字符串中字符组合的模式.在javascript中,正则表达式也是对象.这些模式被用于Re ...
- Python 图片转字符画 学习笔记
Python 图片转字符画 学习笔记 标签(空格分隔): Python 声明:此文章和所有代码是学习笔记,非原创,原文教程地址:https://www.shiyanlou.com/courses/37 ...
- 小菜鸡学习---<正则表达式学习笔记2>
正则表达式学习笔记2 一.修饰符 前面我们学习的都是用于匹配的基本的关键的一些表达式符号,现在我们来学习修饰符.修饰符不写在正则表达式里,修饰符位于表达式之外,比如/runoob/g,这个最后的g就是 ...
随机推荐
- python第六天
深浅拷贝,元祖,字典 ,集合的定义以及基本操作方法 深浅拷贝 # 值拷贝:应用场景最多值拷贝:先创建一个列表ls = [1, 'abc', [10]] 再定义 ls1 = ls 此处ls1会直接将 ...
- 服务器配置 ssl 证书
最近因为公司的 服务器 ssl证书即将到期(服务器 和 ssl证书管理都在 腾讯云上), 所以为了能顺利的 重新申请 ssl证书 ,我和小伙伴 在他的个人服务器上尝试了一波(我们居然都不会 ...) ...
- Linux系统下rm删除文件后空间没有释放问题解决办法
一.问题描述 今日收到zabbix监控报警,发现生产环境一台服务器的磁盘空间不足,需要进行处理,登录后发现可利用率不足20%,进行相关查看和处理工作:但是操作删除了一些备份文件和日志信息后,查看空间仍 ...
- npm install 时出现的 EACCES: permission denied 错误的可能有效的解决方案
最近我开始接触手机 app 的编写,公司用到了 Nativescript.当我下载了公司的项目后,在配置时出现了不少的问题,其中出现概率最高的就是 EACCES: permission denied ...
- QButtonGroup按钮组
继承 QObject 提供 一个抽象的按钮容器, 可以将多个按钮划分为一组,不具备可视化的效果,一般放的都是可以被检查的按钮 import sys from PyQt5.QtWidgets impo ...
- P1822 魔法指纹
一道放在分块训练中的分块打表屑题 看了神NaCly_Fish的题解学了间隔打表(话说这么屑的东西有什么学的必要吗) 内容大多摘自大佬的题解 1,答案可递推,才适合间隔打表 什么叫可递推呢?假设f[n] ...
- vueSSR全栈(项目实战 mac)
1.准备安装及指定版本 参考安装类中的 安装部分(node,npm,webpack) nuxt 官网下载nuxt脚手架(可以自定义版本) 需要下载MongoDB redis 以及数据库可视化工具 具 ...
- pythonのdjango 信号
一.内置信号 Django中提供了“信号调度”,用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. Model signals pre_init # d ...
- Linux的简单命令
Linux的简单命令 1.更改linux服务器的登录密码 成功登录后输入命令: passwd 然后按照提示操作即可 2.在当前路径下新建文件夹:mkdir 新建文件夹名 3.解压和压缩文件tar.gz ...
- dos.orm的事务处理
dos.orm也包含事务处理,没有太多封装,这里有几个简单的示例代码. using (DbTrans trans = DbSession.Default.BeginTransaction()) { D ...