第十二章 Python正则表达式

news2025/4/15 0:44:17

系列文章目录
第一章 Python 基础知识
第二章 python 字符串处理
第三章 python 数据类型
第四章 python 运算符与流程控制
第五章 python 文件操作
第六章 python 函数
第七章 python 常用内建函数
第八章 python 类(面向对象编程)
第九章 python 异常处理
第十章 python 自定义模块及导入方法
第十一章 python 常用标准库
第十二章 python 正则表达式
第十三章 python 操作数据库


文章目录

  • 脑图
  • 正则表达式介绍
  • re标准库基本使用
    • 语法:re.compile(pattern,flags=0)
    • 语法:re.match(pattern,flags=0)
  • 代表字符
  • 原始字符r
  • 代表数量
  • 代表边界
  • 代表分组、贪婪、其他方法
    • 贪婪和非贪婪匹配
    • 其他方法
    • 标志位
  • 总结


脑图

正则
什么是正则表达式?
re 标准库
re.compile
re.match
代表字符
. 任意一个字符--除了\n
[] 匹配中括号的任意一个字符
\d 匹配一个数字
\D 匹配非数字
\s 匹配空格 tab键
\S 匹配非空白
\w 匹配非特殊字符,既a-z\A-Z\0-9\_\汉字
\W 匹配特殊字符,既非字母\非数字\非汉字\非\_\
原始字符串
r 字符串里的特殊意义符号会自动加转义符
代表数量
* 0次或者多次
+ 1次或者多次
? 0次或者1次
{n} n次
{n,} 至少n次
{n,m} n次到m次
代表边界
^ 以什么开头
$ 以什么结尾
\b 匹配单词边界
\B 匹配非单词边界
代表分组
| 任意两边任意一个正则表达式
re 匹配小括号中正则表达式,将括号作为一个分组
\'n'回车符 ----- n是数字,从1开始编号,表示引用第n个分组匹配的内容
(?P<'name<'re) 分组别名
(?P=name) 引用分组别名
贪婪模式和非贪婪模式
re 标准库其他方法
search 搜索
findall 查询全部
split 分割
sub 替换
标志位
re.I 忽略大小写
re.S 匹配换号

正则表达式介绍

正则表达式是对字符串操作的一种逻辑方式,就是用预先定义好的一些特定字符及这些特定字符的组合,组成一个规则字符串,这个规则字符串就是表达对字符串的逻辑,给定一个正则表达式和另一个字符串,通过正则表达式从字符串得到我们想要的部分

re标准库基本使用

方法描述
re.compile(pattern,flags=0)把正则表达式编译成一个对象
re.match(pattern,string,flags=0)匹配字符串开始,如果不匹配返回None
re.search(pattern,string,maxsplit=0,flags=0)扫描字符串寻找匹配,如果符合返回一个匹配对象并终止匹配,否则返回None
re.split(pattern,string,maxsplit=0,flags=0)以匹配模式作为分隔符,切分字符串为列表
re.findall(pattern,string,flags=0)以列表形式返回所有匹配的字符串
re.finditer(pattern,string,flags=0)以迭代器形式返回所有匹配的字符串
re.sub(pattern,repl,string,count=0,flags=0)字符串替换,repl替代匹配的字符串,repl可以是一个函数

语法:re.compile(pattern,flags=0)

pattern指的是正则表达式。flags是标志位的修饰符,用于控制表达式匹配模式

实例1import re
s = "this is test string"
pattern = re.compile('this')
result = pattern.match(s)
# 匹配成功后,result对象会增加一个group()方法,可以用它来获取匹配结果
print(result.group())

语法:re.match(pattern,flags=0)

import re
s = "this is test string"
result = re.match('this',s)
print(result.group())

代表字符

字符描述
.任意单个字符(除了\n)
[]匹配中括号中的任意1个字符,并且特殊字符写在[]会被当成普通字符来匹配
[.-.]匹配中括号中范围内的任意1个字符,例如[a-z],[0-9]
[^]匹配[^字符]之外的任意一个字符
\d匹配数字,等效[0-9]
\D匹配非数字字符,等效[^0-9]
\s匹配单个空白字符(空格、Tab键),等效[\t\n\r\f\v]
\S匹配空白字符之外的所有字符,等效[^\t\n\r\f\v]
\w匹配字符、数字、下划线,等效[a-zA-Z0-9]
\W与\w相反,等效[……a-zA-Z0-9]
import re
s = "hello world"
result1 = re.match('.',s)
result2 = re.match('..',s)
result3 = re.match('...',s)
result4 = re.match('hell.',s)
print(result1)
print(result2)
print(result3)
print(result4)
result5 = re.match('[a-z]',s)
print(result5)
result6 = re.match('[^a-z]',s)
print(result6)
n = '123 4567777777'
result = re.match('\d\d\d\s',n)
print(result)

n = 'aBc123'
result = re.match('\w\w\w\w\w\w',n)
print(result)

在这里插入图片描述

原始字符r

“r” 表示原始字符串,有了它,字符串里的特殊意义符号就会自动加转义符

实例:
import re
s = "123\\abc"
result = re.match("123\\abc",s)
result1 = re.match("123\\\\abc",s)
result2 = re.match(r"123\\abc",s)
print(result)
print(result1)
print(result2)

在这里插入图片描述

代表数量

代表数量前方需要一个表达式,只是数量会报错
例如:
import re
s = “hello world”
result = re.match(‘*’,s)
print(result)
是会报错的

字符描述
*匹配前面的子表达式0次或多次(无限次)
+匹配前面的子表达式1次或多次
匹配前面的子表达式0次或1次
{n}匹配花括号前面字符n个字符
{n,}匹配花括号前面字符至少n个字符
{n,m}匹配花括号前面字符至少n个字符,最多m个字符
import re
s = "hello world"
result = re.match("hel*o",s)   # 匹配所有
result1 = re.match("hel+o",s)  # 匹配前1个字符一次或多次
result2 = re.match("hello?",s) # 匹配前1个字符一次,如果两次无效
result3 = re.match(".{5}",s)
result4 = re.match(".{3,8}",s)
print(result)
print(result1)
print(result2)
print(result3)
print(result4)
n = "17600000993"
result5 = re.match(".{11}",n)
# result5 = re.match("\d{11}",n)
if result5:
    print("这是一个11位的手机号")
else:
    print("这不是一个手机号")

在这里插入图片描述

代表边界

字符描述
^匹配以什么开头
$匹配以什么结尾
\b匹配单词边界
\B匹配非单词边界
import re
email = "wangzq@163.com"
result = re.match("^\w+@\d+\.\w+",email)
result1 = re.match("^\w+@[0-9]+\.[a-z]+$",email)
print(result)
print(result1)

在这里插入图片描述

代表分组、贪婪、其他方法

字符描述
匹配竖杠两边的任意一个正则表达式
(re)匹配小括号中正则表达式
使用\n反向引用,n是数字,从1开始编号,表示引用第n个分组匹配的内容
(?Pre)分组别名,name是表示分组名称
(?P=name)引用分组别名
import re
s = "<h1>wangzq@163.com</h1>"
result = re.match(r"<(\w+[0-9])>.*</(\1)>",s) # (re)用法
print(result)

在这里插入图片描述

import re
s = "hello world"
result = re.match("(?P<h>\w+) (?P<w>\w+)",s)
print(result)
print(result.group())
print(result.group(1))
print(result.group(2))
print(result.group(1,2))
print(result.group("h"))
print(result.group("w"))

在这里插入图片描述

贪婪和非贪婪匹配

贪婪模式:尽可能最多匹配
非贪婪模式:尽可能最少匹配,一般在量词(*、+)后面加个?问号就是非贪婪模式

import re
s = "hello 66666666"
result = re.match("hello 6+",s) # 贪婪匹配
print(result)

result = re.match("hello 6+?",s) # 非贪婪匹配
print(result)

s = "我今年30岁"
result = re.match("\w+",s) # 贪婪匹配
print(result)
result = re.match("\w+?(\d+)(\w+)",s) # 非贪婪匹配
print(result.group())
print(result.group(1))
print(result.group(2))

在这里插入图片描述

其他方法

类别描述
re.search(pattern,string,flags=0)扫描字符串寻找匹配,如果符合返回一个匹配对象并终止屁屁额,否则返回None
re.split(pattern,string,maxsplit=0,flags=0)以匹配模式作为分隔符,切分字符串为列表
re.findall(pattern,string,flags=0)以列表形式返回所有匹配的字符串
re.finditer(pattern,string,flags=0)以迭代器形式返回所有匹配的字符串
re.sub(pattern,repl,sting,count=0,flags=0)字符串替换,repl替换匹配的字符串,repl可以是一个函数
import re
s = "我今年30岁,身高175cm"
result = re.search("\d+",s)
print('search:',result.group())
result = re.split("\d+",s)
print('split:',result)
print('split:',result[0])
result = re.findall("\d+",s)
print('findall:',result)
result = re.finditer("\d+",s)
print('finditer:',result)
result = re.sub("30","40",s)
print('sub:',result)

在这里插入图片描述

标志位

字符描述
re.I/re.lGNORECASE忽略大小写
re.S/re.DOTAIL匹配所有字符,包括换行符\n,如果没有这个标志将匹配除了换行符
import re
M = "hello world"
RR = re.match("Hello",M,re.I)
print(RR)
print("=============")
s = """hello
world
"""
result = re.match("hello.*",s,re.S)
print(result)
print(result.group())

在这里插入图片描述


总结

以上就是今天学习的内容,本文仅仅简单学习了python的正则表达式(代表字符、代表数量、代表边界等)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1179207.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

独立键盘接口设计(Keil+Proteus)

前言 软件的操作参考这篇博客。 LED数码管的静态显示与动态显示&#xff08;KeilProteus&#xff09;-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/134101256?spm1001.2014.3001.5501实验&#xff1a;用4个独立按键控制8个LED指示灯。 按下k1键&#x…

VB.NET—DataGridView控件教程详解

目录 前言: 过程: 第一步: 第二步: 第三步: 第四步: 第五步&#xff1a; 番外篇: 总结: 前言: DataGridView是.NET FormK中的一个Windows窗体控件&#xff0c;它提供了一个可视化的表格控件&#xff0c;允许用户以表格形式显示和编辑数据。它通常用于显示和编辑数据库…

50基于matlab的传统滤波、Butterworth滤波、FIR、移动平均滤波、中值滤波、现代滤波、维纳滤波、自适应滤波、小波变换

基于matlab的传统滤波、Butterworth滤波、FIR、移动平均滤波、中值滤波、现代滤波、维纳滤波、自适应滤波、小波变换&#xff0c;七种滤波方法&#xff0c;可替换自己的数据进行滤波&#xff0c;程序已调通&#xff0c;可直接运行。 50matlabButterworth滤波 (xiaohongshu.com)…

AI创作系统ChatGPT商业运营系统源码+支持GPT4/支持ai绘画

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

关于 HTML 的一切:初学者指南

HTML 代表超文本标记语言&#xff0c;是用于创建网页和 Web 应用程序的标准语言。 本指南将全面介绍 HTML&#xff0c;涵盖从基本语法和语义到更高级功能的所有内容。 我的目标是用简单的术语解释 HTML&#xff0c;以便即使没有编码经验的人也能学习如何使用 HTML 构建网页。…

Ps:色彩范围

Ps菜单&#xff1a;选择/色彩范围 Select/Color Range 色彩范围 Color Range是一个功能强大选择命令&#xff0c;不仅可以基于颜色进行选择&#xff0c;而且可以基于影调进行选择。不仅可以用来检测人脸选择肤色&#xff0c;也可用来选择超出印刷色域范围的区域。 在图层蒙版的…

【人工智能专栏】(5)知识表示方法的习题及其解答

目录 1. 简述2. 题目3. 解答4. 文章传送门 1. 简述 前面几篇文章&#xff0c;我们讲述了人工智能中知识表示的一些常用方法&#xff0c;下面将给出一些习题供大家练习&#xff0c;看看是否完全掌握了相关的知识。 2. 题目 什么是知识&#xff1f;有哪几类分类方法&#xff1f…

YOLOv5 7.0 网络结构解读

前言 YOLOV5是一系列在COCO数据集上预训练的目标检测架构和模型&#xff0c;结合了在数千个小时的研究和开发中获得的经验教训和最佳实践。本文主要以yolov5s为例介绍YOLOV5-v7.0版本的网络架构及初始化超参数。 一.YOLOV5s网络结构图 网络结构主要包含以下部分&#xff1a;…

Qwt QwtKnob绘制旋钮

1.简介 QwtKnob是Qwt库中的一个类&#xff0c;用于绘制一个旋钮样式的仪表盘。它继承QwtAbstractSlider类&#xff0c;提供了一些额外的功能和样式&#xff0c;用于旋转和选择值。 以下是类继承关系&#xff1a; 2.常用方法 旋钮&#xff08;Knob&#xff09;相关的属性和方法…

UseGalaxy.cn生信云|生物信息必备技能-出版级别的circos圈图绘制

2023-11-06&#xff0c;Galaxy生信云平台 UseGalaxy.cn 新增circos圈图绘制工具。 Graph/Display Data Circos visualizes data in a circular layout (Galaxy Version 0.69.8galaxy12) Circos&#xff08;Krzywinski等人&#xff0c;2009年&#xff09;是一个用于以圆形布局可…

lv10 嵌入式开发 在线英英词典

1 有道词典流程分析及本项目功能描述 1.1 抽取项目原理分析 本项目功能描述 用户注册和登录验证服务器端将用户信息和历史记录保存在数据库中。客户端输入用户名和密码&#xff0c;服务器端在数据库中查找、匹配&#xff0c;返回结果单词在线翻译根据客户端输入的单词在字典文…

项目实战:组件扫描实现(1)-扫描类路径所有文件

1、ComponentScan 组件扫描类 一下知识本人都是在Maven工程下总结的&#xff0c;所以目录结构会不一样这个类的作用是扫描所有的classes目录下的所有的字节码文件&#xff0c;找到相应的类&#xff0c;然后找到相应类上的注解 package com.csdn.mymvc.core; import java.io.Fi…

Single-cell 10x Cell Ranger analysis

first step download SRR data #这是批量下载 nohup prefetch -X 100GB --option-file SRR_Acc_List.txt & nohup fastq-dump --gzip --split-files -A ./SRR13633760 -O /home/scRNA/ &next Build a custom reference using Cell Ranger mkref 首先&#xff0c;找…

音视频技术开发周刊 | 318

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 日程揭晓&#xff01;速览深圳站大会专题议程详解 LiveVideoStackCon 2023 音视频技术大会深圳站&#xff0c;保持着往届强大的讲师阵容以及高水准的演讲质量。两天的参会…

selenium自动化测试入门 —— 层级定位与定位一组元素

一、层级定位(二次定位) 在实际测试过程中&#xff0c;一个页面可能有多个属性基本相同的元素&#xff0c;如果要定位到其中的一个&#xff0c;这时候需要用到层级定位。先定位其父元素&#xff0c;然后再通过父元素定位该元素。 示例&#xff1a;通过层级定位搜狗输入框 dr…

Mac版eclipse如何安装,运行bpmn文件

一、下载程序包 网址&#xff1a;https://www.eclipse.org/downloads M2芯片安装包名称&#xff1a;eclipse-jee-2022-12-R-macosx-cocoa-aarch64.dmg 具体安装包版本根据自己电脑型号选择 二、eclipse安装步骤 1&#xff09;双击下载的文件 2&#xff09;将eclipse拖入到…

京东大数据:2023年Q3美妆行业数据分析报告

近日&#xff0c;珀莱雅发布三季报&#xff0c;今年前三季度&#xff0c;公司实现营收52.49亿元&#xff0c;同比增长32.47%。分季度看&#xff0c;“618大促”所在Q2业绩增长最为亮眼&#xff0c;营收同比增速达到46.22%&#xff0c;进入Q3&#xff0c;在电商大促缺席情况下&a…

Python---字符串的修改方法---split()方法--切割

split()方法 split 英 /splɪt/ v. 分裂&#xff0c;使分裂&#xff08;成不同的派别&#xff09;&#xff1b;分开&#xff0c;使分开&#xff08;成为几个部份&#xff09;&#xff1b;&#xff08;使&#xff09;撕裂&#xff1b;分担&#xff0c;分享&#xff1b;划破…

Linux:进程控制的概念和理解

文章目录 进程的创建fork函数写时拷贝的原理fork函数的用法和失败原因 进程终止进程的退出进程异常的问题 进程终止进程退出 进程等待什么是进程等待&#xff1f;为什么要进行进程等待&#xff1f;如何进行进程等待&#xff1f;父进程如何知道子进程的退出信息&#xff1f; wai…

element的表单校验证件号规则以及输入“无”的情况校验通过

element的表单校验证件号规则以及输入“无”的情况校验通过 <el-col :span"6"><el-form-item label"证件号码" prop"Idnumber" class"grid-content bg-purple"><el-input v-model"testForm.Idnumber" placeh…