python 学习笔记十八 正则表达式

正则表达式简介

  • 正则表达式(或RE)是一种小型的、高度专业化的编程语言,在python中内嵌在python中,并通过re模块实现,正则表达式被编译成一系列的字节码,然后通过c编写的匹配引擎执行。
  • 正则表达式就是描述字符串排列的一种规则,其主要用于字符串的匹配,经常用于找到某一类符合格式要求的数据;在python中我们经常用re模块来实现正则表达式

正则表达式基础

原子

原子是正则表达式最基本的组成单位,正则表达式至少包含一个一个原子,常见的原子有:

  • 普通字符
  • 非打印字符
  • 通用字符
  • 原子表

普通字符
普通字符如数字,字母,下划线等都可以作为原子,yes中含有三个原子:y、e、s

hello中含有he,所以匹配成功
在这里插入图片描述
非打印字符
非打印字符指的是字符串中用于格式控制的符号常见的有\n换行符,\t制表符

a中有换行,所以匹配成功
在这里插入图片描述
通用字符
通用字符:一个原子可以匹配一类字符,人们常用的
常见的通用字符及其意义

字符意义
\w匹配任意一个字母、数字或下划线
\W匹配除字母、数字和下划线以外的任意一个字符
\d匹配任意一个十进制数
\D匹配除十进制数以外的任意一个字符
\s匹配任意一个空白字符
\S匹配除空白字符以外的任意一个字符

匹配a中含有wpython的部分
在这里插入图片描述
原子表
原子表用[]表示,使用原子表可以定义一组地位平等的原子,匹配的时候取原子表中任意一个原子进行匹配,如[abc]str可以匹配字符串‘astr’,‘bstr’,‘cstr’;[^]代表除原子表里的均可以匹配,如 [^abc]str可以匹配[d-z]str,不能匹配
‘astr’,‘bstr’,‘cstr’

在这里插入图片描述

元字符

元字符:正则表达式中具有特殊含义的字符;元字符分为任意匹配字符,边界限制元字符,界定符,模式选择符,模式单元等

任意匹配字符
任意匹配字符‘.’,可用于匹配一个除换行符以外的任意字符
在这里插入图片描述
边界限制元字符

  • 用‘^‘匹配字符串的开始, ‘^abc‘表示可以匹配以abc开头的字符串,其余均不匹配
    在这里插入图片描述
  • 用’$‘匹配字符串的结束,‘abc$‘表示可以匹配以abc结尾的字符串,其余均不匹配
    在这里插入图片描述

限定符

常见限定符及其含义

限定符含义
*匹配0次、1次或多次前面的原子
匹配0次、1次前面的原子
+匹配1次或多次前面的原子
{n}前面的原子恰好出现n次
{n,}前面的原子至少出现n次
{n,m}前面的原子至少出现n次,至多出现m次
|模式选择符
()模式单元符
  • *实例
    匹配任意次,可以是0次
    在这里插入图片描述

  • ?实例
    匹配0次或1次表示可以匹配不到
    在这里插入图片描述

  • +实例
    匹配一次或多次,不能是0次
    在这里插入图片描述

  • {n}实例
    {n}匹配前面原子恰好出现n次,其余不匹配
    在这里插入图片描述

  • {n,}实例
    {n,}匹配前面原子出现次数大于等于n,小于n的无法匹配
    在这里插入图片描述

  • {n,m}实例
    匹配前面原子出现次数在[n,m]之间
    在这里插入图片描述
    模式选择符
    模式选择符’|'可以设置多个匹配模式,匹配时满足任意一个都可以
    在这里插入图片描述
    模式单元符
    模式单元符‘()’,可以用()将原子组合成一个整体用于匹配,如(aa)表示把aa当做一个整体进行匹配,此时字符a是无法匹配的
    在这里插入图片描述

模式修正

在不修改正则表达式前提下,模式修正可以修正正则表达式的含义,从而调整匹配结果。

常见模式修正符及其含义

修正符含义
I匹配时忽略大小写
X匹配时忽略模式中的空白
S将字符串看作单行,换行符看做普通字符
  • I 实例
    加I之后忽略字母的大小写
    在这里插入图片描述
  • X 实例
    加x后忽略pattern中的空白
    在这里插入图片描述
  • S 实例
    加S后可以匹配换行符\n
    在这里插入图片描述
贪婪模式、懒惰模式

贪婪模式就是尽可能多的匹配,懒惰模式就是尽可能少的匹配。
常见的贪婪模式 .* 匹配任意多个任意字符,非贪婪就在贪婪模式中的*或+后面加?即可。

可以发现贪婪模式尽可能多的匹配结果,非贪婪模式则匹配到第一个结果后就直接返回结果
在这里插入图片描述

常用函数
re.match()

用于从源字符串的起始位置匹配一个模式,如果匹配成功则返回匹配的结果,否则返回None,匹配成功后可以使用.span()返回在源字符串中的位置

re.match(pattern,string,flag)

  • pattern:匹配的表达式
  • string:源字符串
  • flag:标志位,可以填写模式修正符

该方法的局限性是只能从起始位置开始匹配
在这里插入图片描述

re.search()

用于匹配源字符串是否含有与模式相同的子串,如果匹配成功则返回匹配的结果,否则返回None,匹配成功后可以使用.span()返回在源字符串中的位置

re.search(pattern,string,flag)

  • pattern:匹配的表达式
  • string:源字符串
  • flag:标志位,可以填写模式修正符

该方法可以匹配整个字符串,但只会返回第一次出现的位置
在这里插入图片描述

全局匹配函数

re.complie()对正则表达式进行预编译,完成后使用findall()找出所有匹配结果
在这里插入图片描述

re.sub()

根据正则表达式来实现替换某些字符串
re.sub(pattern,rep,string,max)

  • pattern:正则表达式
  • rep:替换后留下的字符串
  • string:用于被替换的字符串
  • max:最多替换的次数,不填就会全部替换
    在这里插入图片描述

最后

可以关注一下我的公众号,最近开始写公众号,我会在上面分享一些资源和发布一些csdn上发布不了的干货
在这里插入图片描述

点个关注是对博主最大的支持

  • 29
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值