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

文章目录

      • 正则表达式简介
      • 正则表达式基础
        • 原子
        • 元字符
        • 模式修正
        • 贪婪模式、懒惰模式
        • 常用函数
          • re.match()
          • re.search()
          • 全局匹配函数
          • re.sub()

正则表达式简介

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

正则表达式基础

原子

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

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

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

hello中含有he,所以匹配成功
python 学习笔记十八 正则表达式_第1张图片
非打印字符
非打印字符指的是字符串中用于格式控制的符号常见的有\n换行符,\t制表符

a中有换行,所以匹配成功
python 学习笔记十八 正则表达式_第2张图片
通用字符
通用字符:一个原子可以匹配一类字符,人们常用的
常见的通用字符及其意义

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

匹配a中含有wpython的部分
python 学习笔记十八 正则表达式_第3张图片
原子表
原子表用[]表示,使用原子表可以定义一组地位平等的原子,匹配的时候取原子表中任意一个原子进行匹配,如[abc]str可以匹配字符串‘astr’,‘bstr’,‘cstr’;[^]代表除原子表里的均可以匹配,如 [^abc]str可以匹配[d-z]str,不能匹配
‘astr’,‘bstr’,‘cstr’

python 学习笔记十八 正则表达式_第4张图片

元字符

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

任意匹配字符
任意匹配字符‘.’,可用于匹配一个除换行符以外的任意字符
python 学习笔记十八 正则表达式_第5张图片
边界限制元字符

  • 用‘^‘匹配字符串的开始, ‘^abc‘表示可以匹配以abc开头的字符串,其余均不匹配
    python 学习笔记十八 正则表达式_第6张图片
  • 用’$‘匹配字符串的结束,‘abc$‘表示可以匹配以abc结尾的字符串,其余均不匹配
    python 学习笔记十八 正则表达式_第7张图片

限定符

常见限定符及其含义

限定符 含义
* 匹配0次、1次或多次前面的原子
匹配0次、1次前面的原子
+ 匹配1次或多次前面的原子
{n} 前面的原子恰好出现n次
{n,} 前面的原子至少出现n次
{n,m} 前面的原子至少出现n次,至多出现m次
| 模式选择符
() 模式单元符
  • *实例
    匹配任意次,可以是0次
    python 学习笔记十八 正则表达式_第8张图片

  • ?实例
    匹配0次或1次表示可以匹配不到
    python 学习笔记十八 正则表达式_第9张图片

  • +实例
    匹配一次或多次,不能是0次
    python 学习笔记十八 正则表达式_第10张图片

  • {n}实例
    {n}匹配前面原子恰好出现n次,其余不匹配
    python 学习笔记十八 正则表达式_第11张图片

  • {n,}实例
    {n,}匹配前面原子出现次数大于等于n,小于n的无法匹配
    python 学习笔记十八 正则表达式_第12张图片

  • {n,m}实例
    匹配前面原子出现次数在[n,m]之间
    python 学习笔记十八 正则表达式_第13张图片
    模式选择符
    模式选择符’|'可以设置多个匹配模式,匹配时满足任意一个都可以
    python 学习笔记十八 正则表达式_第14张图片
    模式单元符
    模式单元符‘()’,可以用()将原子组合成一个整体用于匹配,如(aa)表示把aa当做一个整体进行匹配,此时字符a是无法匹配的
    python 学习笔记十八 正则表达式_第15张图片

模式修正

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

常见模式修正符及其含义

修正符 含义
I 匹配时忽略大小写
X 匹配时忽略模式中的空白
S 将字符串看作单行,换行符看做普通字符
  • I 实例
    加I之后忽略字母的大小写
    python 学习笔记十八 正则表达式_第16张图片
  • X 实例
    加x后忽略pattern中的空白
    python 学习笔记十八 正则表达式_第17张图片
  • S 实例
    加S后可以匹配换行符\n
    python 学习笔记十八 正则表达式_第18张图片

贪婪模式、懒惰模式

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

可以发现贪婪模式尽可能多的匹配结果,非贪婪模式则匹配到第一个结果后就直接返回结果
python 学习笔记十八 正则表达式_第19张图片

常用函数

re.match()

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

re.match(pattern,string,flag)

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

该方法的局限性是只能从起始位置开始匹配
python 学习笔记十八 正则表达式_第20张图片

re.search()

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

re.search(pattern,string,flag)

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

该方法可以匹配整个字符串,但只会返回第一次出现的位置
python 学习笔记十八 正则表达式_第21张图片

全局匹配函数

re.complie()对正则表达式进行预编译,完成后使用findall()找出所有匹配结果
python 学习笔记十八 正则表达式_第22张图片

re.sub()

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

  • pattern:正则表达式
  • rep:替换后留下的字符串
  • string:用于被替换的字符串
  • max:最多替换的次数,不填就会全部替换
    python 学习笔记十八 正则表达式_第23张图片

你可能感兴趣的:(python,学习笔记,正则表达式,python)