Python正则表达式的re模块、零宽断言、分组向后引用

目录

1、前言

1.1  什么是正则表达式

1.2  正则的目的

1.3  正则表达式的优缺点

1.4  符号

2、re模块的基本用法

2.1  match与search  查找第一个匹配

2.1.1  re.search

2.1.2  re.match 

2.1.3  注意

2.2  findall 和 finditer  找到多个匹配

2.2.1  re.findall

2.2.2  re.finditer

2.2.3  区别  

2.3 re.sub('匹配正则' , '替换内容' , 'string')

2.4  编译正则:re.compile('匹配正则')

        2.4.1  编译正则的特点

3、基本正则匹配

3.1  基本正则匹配-区间

3.2  基本正则匹配-或匹配

3.3  基本正则匹配-取反

4、正则重复

4.1  贪婪模式和非贪婪模式

5、  正则分组

5.1  简单分组

5.2  分组向后引用(引用分组)

5.3  命名分组

5.4  捕获分组和非捕获分组

6、正则标记

 6.1 内联标记: (?imx)re

 6.2  内联标记:(?imx: re)

 6.3  举例

7、正则断言

7.1  定义

7.2  举例

8、习题

8.1  找出IP地址

8.2


1、前言

1.1  什么是正则表达式

        正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。

1.2  正则的目的

  • 数据挖掘
  • 验证
  • 指定一个匹配规则,从而识别该规则是否在一个更大的文本字符串中
  • 正则表达式可以识别匹配规则的文本是否存在
  • 还能将一个规则分解为一个或多个子规则,并展示每个子规则匹配的文本

1.3  正则表达式的优缺点

  • 优点:提高工作效率、节省代码
  • 缺点:复杂,难于理解

        官方文档:re — Regular expression operations — Python 3.10.6 documentation

1.4  符号

  • ?                 匹配前一项0次或一次
  • .                  匹配任意一个除换行符以外的字符,占位符
  • +                 匹配前一项一次以上 1~n次
  • *                 匹配前一项任意次  0~n次
  • {n,m}          匹配前一项n~m次
  • {n,}             匹配前一项n次以上
  • {,m}            匹配前一项0~m次
  • {n}              匹配前一项n次
  • ^                 开头
  • $                 结尾

  • \Axx  匹配以xx字符串开始
  • \b      匹配词边界(字母数字中文都属于单词字符)
  • \B      匹配非词边界
  • \w      匹配单词字符
  • \W     匹配非单词字符
  • \d      匹配数字
  • \D     匹配非数字
  • \s      匹配空白
  • \S     匹配非空白

2、re模块的基本用法

2.1  match与search  查找第一个匹配

2.1.1  re.search

        查找匹配项,接受一个正则表达式和字符串,并返回发现的第一个匹配。如果完全没有找到匹配,re.search返回None。

import  re
rest = re.search(r"san","hello san")
print(rest)

输出:
<re.Match object; span=(6, 9), match='san'>

2.1.2  re.match 

        从字符串头查找匹配项,接受一个正则表达式和字符串,从主串第一个字符开始匹配,并返回发现的第一个匹配。如果字符串开始不符合正则表达式,则匹配失败,re.match返回None。

        match.group(default=0):返回匹配的字符串。

        group是由于正则表达式可以分拆为多个只调出匹配子集的子组,0是默认参数,表示匹配的整个串,n 表示第n个分。

        match.start():

        start方法提供了原始字符串中匹配开始的索引。

        match.end():

        end方法提供了原始字符串中匹配开始的索引。

        match.groups():

        groups返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。

import  re
rest = re.match(r"san","hello san")
print(rest)

输出:
None

         r'san' 中的r代表的是raw(原始字符串),原始字符串与正常字符串的区别是原始字符串不会将\字符解释成一个转义字符,正则表达式使用原始字符很常见且有用。

2.1.3  注意

        re.match()函数只检测RE是不是在string的开始位置匹配,也就是说match()只有在0位置匹配成功的话才有返回, 如果不是开始位置匹配成功的话,match()就返回none, 不能和span()、group()搭配使用,否则会报错。以下的写法是错误的。

        search()会扫描整个string查找匹配;search()可以不从0位置开始匹配,这就是和match()的区别。

        参考文章:

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值