正则表达式是对字符串操作的一种逻辑公式,用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑

正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串

一、常用操作符

正则表达式中的常用操作符如下

操作符 说明 举例
. 表示单个字符
[ ] 字符集,对单个字符给出取值范围 [abc] 表示a、b、c;[a-z] 表示a到z的任意单个字符
[^ ] 给字符集,对单个字符串给出排除范围 [^abc] 表示非a、b、c的任意单个字符
* 前一个字符0次或无限次扩展 abc* 表示ab、abc、abcc…
+ 前一个字符1次或无限次扩展 abc+ 表示abc、abcc、abccc…
? 前一个字符0次或一次扩展 abc? 表示ab、abc
| 左右表达式中的任意一个 abc|def 表示abc或def
{m} 扩展前一个字符m次 ab{2}c 表示abbc
{m, n} 扩展前一个字符m到n次,包括n次 ab{1,2}c 表示abc、abbc
^ 匹配字符串开头 ^abc 表示以字符串abc开头
$ 匹配字符串结尾
() 分组标记,内部使用 | 操作符 (abc|def )表示abc或def
\d 数字符号,等价于[0-9]
\w 等价于[A-Za-z0-9]

二、正则表达式的类型

raw string (原生字符串类型):不包含转义字符的字符串,表示形式为r'text'

string(字符串类型):包含转义字符的字符串

比如匹配数字符号,使用原生子串的形式表示为 r'\d',使用字符串类型表示的话,因为 \ 是特殊字符,因此需要进行转义,表示为 '\\d'。由此可见使用原生字符串类型要相对简单一些

三、Re库常用的方法

Python 中通过 Re 库提供对正则表达式的支持,下面主要介绍一下 Re 库中主要使用的函数

1.re.search(pattern, string, flags):在一个字符串中搜索匹配正则表达式的第一个子串,返回 Match 对象

  • pattern:正则表达式的字符串或原生字符串的表示
  • string:待匹配的字符串
  • flags:正责表达式使用时的控制标记,这个参数是可变的

    flags 常用的标记:

  • re.Ire.IGNORECASE):忽略正则表达式的大小写
  • re.Mre.MULTILINE):正则表达式中的 ^ 操作符将给定的字符串的每行当做匹配的开始
  • re.Sre.DOTALL):. 操作符能够匹配所有字符,默认匹配除换行的所有字符

举例

import re# 用于匹配连续的 5 个数字
match = re.search(r'\d{5}', 'f123456g654321')if match:print(match.group(0))# 12345

2.re.match(pattern, string, flags):从一个字符串的开始位置起匹配正则表达式,返回 Match 对象

举例1

import re# 从字符串开始问看看匹配符合条件的 5 个连续的数字
match = re.match(r'\d{5}', 'f123456g654321')
if match:print(match.group(0))# 输出空,没有符合条件的字符串

举例2

import rematch = re.match(r'\d{5}', '123456g654321')
if match:print(match.group(0))# 12345

3.re.findall(pattern, string, flags):搜索字符串,返回一个符合条件的所有子串的集合

举例

import rels = re.findall(r'\d{5}', '123456g654321')
print(ls)# ['12345', '65432']

4.re.split(pattern, string, maxsplit,flags):将一个字符串按照正则表达式匹配的结果进行分割,返回列表类型

  • maxsplit:表示最大的分割数

举例

import rels = re.split(r'[a-z]', '123a45b6', maxsplit=1)
print(ls)# ['123', '45b6'] -> 后面的字符串不进行分割而是整个返回

5.re.finditer(pattern, string, maxsplit,flags):搜索字符串,返回一个符合结果的迭代类型,每个迭代元素是 match 对象

举例

import rem = re.finditer(r'\d{5}', '123456g654321')
for i in m:print(i.group(0))# 12345
# 65432

6.re.sub(pattern, replace, string, maxsplit,count, flags):使用一个新的子串替换所有正则表达式匹配的子串,返回替换后的字符串

  • replace:替换符合正则表达式的新子串
  • 最大替换次数

举例

import renew_str = re.sub(r'\d{5}', 'jas', '123456|654321')
print(new_str)# jas6|jas1

PS:上面的所有例子我们使用的都是 Re 库的函数式用法,这种函数式用法支持一次性的操作,Re 库还提供了一种面向对象的用法,这种用法支持编译后多次操作。使用方法如下

import reregex= re.compile(r'\d{5}')
new_str = re.sub(regex, 'jas', '123456|654321')print(new_str)

上面 regex= re.compile(r'\d{5}') 用于将正则表达式的字符串形式编译成正则表达式对象, 可以帮助我们更好理解正则表达式

四、Match对象

上面有两个方法 re.match(pattern, string, flags)re.search(pattern, string, flags) 返回的是一个 Match 对象,这个 Match 对象是什么呢?下面来介绍一下

Match 对象中的属性

  • string:带匹配的字符串
  • re:匹配时使用的 pattern 对象(正则表达式)
  • pos:正则表达式搜索文本的开始位置
  • endpos:正则表达式搜索文本的结束位置

Match 对象中的方法

  • group(0):返回匹配后的字符串
  • start():匹配字符串在原始字符串中的起始位置
  • end():匹配字符串在原始字符串中的结束位置
  • span():匹配字符串在原始字符串中的返回起始与结束位置

例子

import repattern = re.compile(r'\d{5}')
match = re.search(pattern, 'f123456g654321')print(match.re)
print(match.span())# re.compile('\\d{5}')
# (1, 6)

五、贪婪匹配与最小匹配

我们通过例子来理解什么是贪婪匹配与最小匹配

import re# '*' 表示匹配前面任意字符且任意个数
pattern = re.compile(r'p.*')
match = re.search(pattern, 'pfds45')if match:print(match.group(0))# pfds45

上面这种方式是贪婪匹配,也是 python 默认的匹配方式

import re# '*?' 前一个字符 0 次或无限次扩展
pattern = re.compile(r'p.*?')
match = re.search(pattern, 'pfds45')if match:print(match.group(0))# p

上面这种匹配的方式称为最小匹配,因为是最小匹配因此返回匹配的结果是最小的

最小匹配操作符

  • *?:前一个字符 0 次或无限次匹配
  • +?:前一个字符 1 次或无限次扩展
  • ??:前一个字符 0 次或 1 次扩展
  • {m, n}?:扩展前一个字符 m 次至 n 次

Python入门:正则表达式相关推荐

  1. Python入门基础总结笔记——正则表达式

    Python入门基础总结笔记--正则表达式 完整基础知识参看网站:正则表达式 总结重点 用\d可以匹配一个数字,\w可以匹配一个字母或数字 用*表示任意个字符(包括0个),用+表示至少一个字符 用?表 ...

  2. python速成要多久2019-8-28_2019最全Python入门学习路线,不是我吹,绝对是最全

    近几年Python的受欢迎程度可谓是扶摇直上,当然了学习的人也是愈来愈多.一些学习Python的小白在学习初期,总希望能够得到一份Python学习路线图,小编经过多方汇总为大家汇总了一份Python学 ...

  3. 哪本python入门书内容最详细-重磅 | 由浅入深的 AI 学习路线,最详细的资源整理!...

    原标题:重磅 | 由浅入深的 AI 学习路线,最详细的资源整理! [导读] 本文由知名开源平台,AI技术平台以及领域专家: Datawhale, ApacheCN, AI有道和 黄海广博士联合整理贡献 ...

  4. python基础教程教材-最好的Python入门教材是哪本?

    Python教程领到手,学习不用愁!领 作为一门编程语言,Python是属于入门比较简单的.所以身边不少人都选择了自学Python,而且网上相关资料也有很多,知识兔分享大量的Python教学课程,基本 ...

  5. 学python最好的方式-最好的Python入门教程是?

    Python教程领到手,学习不用愁!领! 作为一门编程语言,Python是属于入门比较简单的.所以身边不少人都选择了自学Python,而且网上相关资料也有很多,知识兔分享大量的Python教学课程,基 ...

  6. 自学python推荐书籍2019-2019最全Python入门学习路线,不是我吹,绝对是最全

    近几年Python的受欢迎程度可谓是扶摇直上,当然了学习的人也是愈来愈多.一些学习Python的小白在学习初期,总希望能够得到一份Python学习路线图,小编经过多方汇总为大家汇总了一份Python学 ...

  7. python入门买什么书-大学生Python入门什么书好?

    大学生python入门所看书籍推荐: 1.<python基础教程>(第2.3版) 这本书是经典的python入门教程,层次鲜明.结构严谨.内容详实,特别是后面几章,作者将前面讲述的内容应用 ...

  8. 自学python入门-学python入门看什么书

    python语言是最近几年流畅起来的编程语言,因其应用范围广,支持跨平台操作,使得python越来越受欢迎,学习python的人也越来越多.python学习网,大量的免费python视频教程,欢迎在线 ...

  9. python语言入门教程-菜鸟学Python入门教程大盘点|7个多月的心血总结

    原标题:菜鸟学Python入门教程大盘点|7个多月的心血总结 阅读本文大概需要5分钟 菜鸟学python已经写了70几篇,入门的教程已经快写完了,我把入门的文章整理了一下,下面是入门篇的一些总结,也是 ...

  10. python推荐入门书籍-学python入门看什么书

    python语言是最近几年流畅起来的编程语言,因其应用范围广,支持跨平台操作,使得python越来越受欢迎,学习python的人也越来越多.python学习网,大量的免费python视频教程,欢迎在线 ...

最新文章

  1. 教育部发文:AI、算法等2018年进入全国高中课程!
  2. flutter TextField 输入框被软键盘挡住的解决方案
  3. 什么心态阻碍了你职业的发展
  4. jsp中的内置对象(9个)、作用
  5. 如何开展灰盒测试[1]:灰盒测试优缺点分析
  6. 安卓Android Studio开发IDE的安装
  7. Flash Media Server 4.5下载
  8. USB redirection
  9. mysql复制表结构创建新表
  10. electron 双击放大事件
  11. 【补充习题三】待定常数法之微分中值定理
  12. 富而喜悦2023直播盛典 唐苓馨主题演说“特别的礼物”!
  13. 数据仓库工程师、大数据开发工程师、BI工程师、ETL工程师之间有什么区别?
  14. 7-5 球的表面积和体积 (10 分)
  15. 【LaTeX符号】条件独立与不独立符号
  16. 电信老总气疯了(爆笑版)!!
  17. LeetCode第 844 题:比较含退格的字符串(C++)
  18. 深度学习(四十八)InfoGAN学习笔记
  19. 慢SQL!压垮团队的最后一根稻草!
  20. mixamo动画批量添加根骨骼与将动作处理成原地动作(blender)

热门文章

  1. 【算法系列之万字总结常用的查找算法,持续补充更新中】
  2. SpringMVC-自定义转换器
  3. 【身份认证与控制二】分布式session共享(序列化问题)
  4. echarts——父元素宽度100%,但canvas宽度100px
  5. JS特效——鼠标跟随特效——动态背景线条跟随鼠标移动
  6. 【springboot中使用拦截器】
  7. Hadoop1.2.1集群安装二
  8. 使用Xcode 4编译器设定Release/Debug教程
  9. sgs 0.9.9 在 Eclipse中调试
  10. 二叉树前序、中序、后序遍历求法