正则表达式(学习笔记)

正则表达式 简介

regular expression ,regex,RE
正则表达式是用来简洁表达一组字符串的表达式。
优势:简洁

例如:
‘py’ ‘pyy’ ‘pyyy’ ‘pyyyy’ … ‘pyyyy…’ ----> py+

‘py’开头,后续存在不多于10个字符,后续字符不能是‘p’或‘y’ -----> py[^py]{0,10}

通用字符串表达框架
简洁表达一组字符串的表达式
针对字符串表达“简洁”和“特征”思想的工具
用来判断某字符串的特征归属

应用
表达文本类型的特征(病毒、入侵等)
同时查找或替换一组字符串
匹配字符串的全部或部分区域
主要应用在字符串匹配

正则表达式的使用

编译:将符合正则表达式语法的字符串转换成正则表达式特征 p=re.compile(regex) 编译后与原本的表达式一致

正则表达式的语法

在这里插入图片描述
在这里插入图片描述

例子:
在这里插入图片描述

Re库的基本使用

Re库是python的标准库(不需要另外安装),主要用来字符串匹配

import re 调用

raw string类型(原生字符串类型(不包含转义符的字符串),只需要在字符串的表式前加一个r就行)

表示为 r’text’

例如:r’[1-9]\d{5}’

string 类型更繁琐 \\来表达正则表达式中的\

当正则表达式包含转义符时,使用raw string来表示正则表达式

re库常用的功能函数
在这里插入图片描述
1.re.search(pattern,string,flags=0)

在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象

pattern:正则表达式的字符串或原生字符串表示
string:待匹配字符串
flags:正则表达式使用时的控制标记
在这里插入图片描述
例:匹配邮政编码

import re
#中国地区编码
match = re.search(r'[1-9]\d{5}','BIT 100081')
if match:
    print(match.group(0))

在这里插入图片描述
2.re.match(pattern,string,flags=0)

从一个字符串的开始位置起匹配正则表达式,返回match对象
参数同re.search()的参数
例:
在这里插入图片描述
3. re.findall(pattern,string,flags=0)

搜索字符串,以列表类型返回全部能匹配的字符串
参数同re.search()的参数
在这里插入图片描述
4. re.split(pattern,string,maxsplit=0,flags=0)

maxsplit:最大分割数,剩余部分作为最后一个元素输出
在这里插入图片描述
在这里插入图片描述
5. re.finditer(pattern,string,flags=0)

搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
在这里插入图片描述
6. re.sub(pattern,repl,string,count=0,flags=0)

在一个字符串中替换所有匹配正则表达式的字串,返回替换后的字符串。
repl:替换匹配字符串的字符串
count:匹配的最大替换次数
在这里插入图片描述
7. regex = re.compile(pattern,flags=0)

将正则表达式的字符串形式编译成正则表达式对象
regex.search()等六个函数都可以这样调用,去掉正则表达式对象

match对象

程序内部认为只有经过compile编译的正则表达式才算一个正则表达式,未经过编译只是正则表达式的一种表达形式。

Match对象的属性:
在这里插入图片描述

m = re.search(r'[1-9]\d{5}','BIT100081 TSU100084')
m.string

在这里插入图片描述

m.re

在这里插入图片描述
在这里插入图片描述
表示m是从第0个位置开始搜索,搜索到第19个位置结束

match对象的方法:
在这里插入图片描述
使用:

在这里插入图片描述

Re库的贪婪匹配和最小匹配

问题引入:
match = re.search(r’PY.*N’,‘PYANBNCNDN’)
match.group(0)
同时匹配长短不同的多项,返回哪一个?

贪婪匹配(re库默认)
输出最长匹配的字符串
即输出‘PYANBNCNDN’

最小匹配
输出最短的字串
match = re.search(r’PY.*?N’,‘PYANBNCNDN’)
match.group(0)
‘PYAN’

对操作符进行扩展
在这里插入图片描述
通过在符号后加?获得最小匹配的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值