python正则表达(06)

2023-09-20 23:23:45

python正则表达(06)


参考视频黑马保姆级视频

**参考API: **菜鸟教程

1 正则表达式概念

正则表达式,又称规则表达式(Regular Expression),是使用单个字符串来描述、匹配某个句法规则的字符
来检索、替换那些符合某个模式(规则)的文本。
简单来说:通过规则去验证字符串是否匹配。

比如,验证一个字符串是否是符合条件的电子邮箱地址,只需要配置好正则规则,即可匹配任意邮箱。
比如通过正则规则: (^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$) 即可匹配一个字符串是否是标准邮箱格式

2 正则的三个基础方法

2.1 match、search、findall三个基础方法

match 是从头匹配,匹配第一个命中项 ,未匹配返None

search全局搜索,匹配第一个命中项, 未匹配返None

findall 全局匹配,匹配全部命中项,未匹配返回值[]列表,如果正则有(),会每个组结果返回结果

Python正则表达式,使用re模块,并基于re模块中三个基础方法来做正则匹配。
分别是:match、search、findall三个基础方法

从被匹配字符串开头进行匹配,匹配成功返回匹配对象(包含匹配的信息),匹配不成功返回空。
2.2 re.match() 函数
2.2.1 re.match(匹配规则,被匹配字符串)

​ 注意:match()尝试从字符串的起始位置匹配一个模式**,如果不是起始位置匹配成功的话**,match() 就返回 none

import re

s = 'python itheima python itheima python itheima'

# 第一个是匹配规则,第二个是被匹配,要筛选的数据,返回匹配的下标span=(0, 6)
result =  re.match("python", s )
print(result)  # 打印结果: <re.Match object; span=(0, 6), match='python'>
print(result.span())  # 打印为 (0,6)
print(result.group()) # python
2.2.2验证是否开头匹配,match是匹配开头,后面的是不匹配
import re
s='1python itheima python itheima python itheima'

result=re.match('python' s)
print(result) # None

match是匹配开头,后面的是不匹配
2.3 re.search()
2.3.1 search(匹配规则,被匹配字符串)

注意:搜索整个字符串,找出匹配的。从前向后,找到第一个后,就停止,不会继续向后

import re
s='1python666itheima666python666'

result=re.search('python',s)
print(result)  # <re.Match object; span=(1, 7), match='python'>

print(result.span()) # (1, 7)
print(result.group()) # python
2.3.2 search整个字符串都找不到,返回None
import re

s='itheima666'
result=re.search('python', s)
print(result)  # None
2.4 re.findall(匹配规则,被匹配字符串)
2.4.1 匹配到返回值

注意:匹配整个字符串,找出全部匹配项

import re
s='1python666itheima666python666'

result = re.findall('python', s)
print(result)  # ['python','python']
2.4.2找不到返回空list:[]
import re
s='1python666itheima666python666'
result =re.findall('itcast', s)
print(result) # []

3 元字符匹配

基础的字符串匹配,正则最强大的功能在于元字符匹配规则

3.1 单字符匹配规则:

字符功能
.点匹配任意1个字符(除了\n),\.匹配点本身
[]匹配[]中列举的字符
\d匹配数字,即0-9
\D匹配非数字
\s匹配空白,即空格、tab键
\S匹配非空白
\w匹配单词字符,即a-z、A-Z、0-9、_
\W匹配非单词字符
3.2 匹配示例:
3.2.1 找出全部数字: \d
import re
s = "itheima1 @@python2 !!666 ##itcast3"

# 字符串前面带上r的标记,表示字符串中转义字符串无效,就是普通字符的意思
result  = re.findall(r'\d', s) 

print(result)   # 打印:['1', '2', '6', '6', '6', '3']
3.2.2 找出特殊字符: \W
import re
s = "itheima1 @@python2 !!666 ##itcast3"

# 字符串前面带上r的标记,表示字符串中转义字符串无效,就是普通字符的意思
result  = re.findall(r'\W', s) 
print(result)  # [' ', '@', '@', ' ', '!', '!', ' ', '#', '#']
3·找出全部英文字母:[a-zA-Z] 或者字母数字[a-zA-Z0-9]
import re
s="itheima1 @@python2 !!666 ##itcast3"

# 字符串前面带上r的标记,表示字符串中转义字符串无效,就是普通字符的意思
result  = re.findall(r'[a-zA-Z]', s) 

print(result)
# 打印:['i', 't', 'h', 'e', 'i', 'm', 'a', 'p', 'y', 't', 'h', 'o', 'n', 'i', 't', 'c', 'a', 's', 't']
3.3 数量匹配
字符功能
*匹配前一个规则的字符出现0至无数次
+匹配前一个规则的字符出现1至无数次
?匹配前一个规则的字符出现0次或1次
{m}匹配前一个规则的字符出现m次
{m,}匹配前一个规则的字符出现最少m次
{m,n}匹配前一个规则的字符出现m到n次
3.4 边界匹配
字符功能
^匹配字符串开头
$匹配字符串结尾
\b匹配一个单词的边界
\B匹配非单词边界
3.5 分组匹配
字符功能
|匹配左右任意一个表达式
()将括号中字符作为一个分组
3.6 匹配规则组合图

在这里插入图片描述

3.7 匹配案例

注意:正则不要随意加空格

3.7.1 匹配账号,只能由字母和数字组成,长度限制6到10位

规则为:^[0-9a-zA-Z]{6,10}$

import re
r = '^[0-9a-zA-Z]{6,10}$'
s = '123456789a'
print(re.findall(r,s)) # 打印:['123456789a']
3.7.2 配QQ号,要求纯数字,长度5-11,第一位不为0

规则 : ^[1-9][0-9]{4,10}&

import re
r = '^[1-9][0-9]{4,10}$'   # 注意:[1-9]匹配第一位,[0-9]匹配后面4到10位
s = '123456789'
print(re.findall(r,s))  #['123456789']

3.7.3 匹配邮箱地址,只允许qq、163、gmail这三种邮箱地址

规则为:^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$

import re
r = r'(^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$)'  # 技巧使用findall整个整体包起来
s = 'a.b.c.d@qq.com.a.z'
print(re.findall(r, s))

打印结果:[('a.b.c.d@qq.com.a.z', '.d', 'qq', '.z')]

优化:使用match

import re
r = r'^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$'
s = 'a.b.c.d@qq.com.a.z'
print(re.match(r, s))

打印结果:<re.Match object; span=(0, 18), match='a.b.c.d@qq.com.a.z'>
更多推荐

SpringCLoud——服务的拆分和远程调用

服务拆分服务拆分注意事项一般是根据功能的不同,将不同的服务按照功能的不同而分开。微服务拆分注意事项不同微服务,不要重复开发相同业务微服务数据独立,不要访问其他微服务的数据库微服务可以将自己的业务暴露为接口,供其他微服务调用远程调用对于远程调用,之前我们说过,微服务之所以不能像单个服务那样互相的调用各自服务的信息,是因为

REC 系列 Visual Grounding with Transformers 论文阅读笔记

REC系列VisualGroundingwithTransformers论文阅读笔记一、Abstract二、引言三、相关工作3.1视觉定位3.2视觉Transformer四、方法4.1基础的视觉和文本编码器4.2定位编码器自注意力的文本分支文本引导自注意力的视觉分支4.3定位解码器定位query自注意力编码器-解码器自

告别加班烦恼:前端表格构建公式树的绝妙应用!

还在为满屏的公式而“内牛满面”吗?还在为长串的公式解析而发愁吗?还在定位错误的公式而苦恼吗?上班要写代码,加班还要分析这又长又臭的公式。你的发际线还好吗?本葡萄来拯救你的发际线啦!带来的不是洗发水,而是公式追踪!这一章,让本葡萄带你用前端电子表格的公式追踪构建公式树,快(解)速(救)分(你)析(的)公(脱)式(发)问题

【物联网】ROM、RAM和FLASH的区别

引言在计算机领域,我们经常听到ROM、FLASH和RAM这些术语,它们是计算机中不同类型的存储器。虽然它们都用于存储数据,但它们之间有着明显的区别。本文将详细介绍ROM、FLASH和RAM的区别,并给出具体的例子和解释。文章目录引言ROM(只读存储器)RAM(随机存储器)FLASH(闪存)总结ROM(只读存储器)ROM

【web开发】12、Django知识点回顾

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录总结、Django知识点回顾提示:以下是本篇文章正文内容,下面案例可供参考总结、Django知识点回顾安装Djangopipinstalldjango创建Django项目django-adminstartprojectmysite注意:Pychar

stm32---定时器输入捕获

一、输入捕获介绍在定时器中断实验章节中我们介绍了通用定时器具有多种功能,输入捕获就是其中一种。STM32F1除了基本定时器TIM6和TIM7,其他定时器都具有输入捕获功能。输入捕获可以对输入的信号的上升沿,下降沿或者双边沿进行捕获,通常用于测量输入信号的脉宽、测量PWM输入信号的频率及占空比。输入捕获的工作原理比较简单

新概念英语(第二册)复习——Lesson 6 - Lesson10

前言在学习6-10之前,确保1-5已经可以脱口而出,否则不需要学习6-10文章目录前言Lesson6-PercyButtons原文译文单词Lesson7-Toolate原文译文单词Lesson8-Thebestandtheworst原文译文单词Lesson9-Acoldwelcome译文单词Lesson10-NotFo

数组初学者向导:使用Python从零开始制作经典战舰游戏

引言战舰游戏,一个广受欢迎的经典游戏,为玩家提供了策略与猜测的完美结合。这个游戏的核心思想是通过猜测敌方船只的位置并尝试击沉它们来赢得比赛。在这篇文章中,我们将使用Python语言和数组来构建这款游戏,让你更加了解数组的操作和实用性。1.游戏概述在战舰游戏中,每位玩家都有一个10x10的网格,可以放置5艘船只。这些船只

C语言实现三子棋游戏(详解)

目录引言:1.游戏规则:2.实现步骤:2.1实现菜单:2.2创建棋盘并初始化:2.3绘制棋盘:2.4玩家落子:2.5电脑落子:2.6判断胜负:3.源码:结语:引言:《三子棋》是一款古老的民间传统游戏,又被称为OOXX棋、黑白棋,井字棋,九宫棋等。游戏分为双方对战,双方依次在九宫格棋盘上摆放棋子,率先将自己的三个棋子连成

Linux 下的 10 个 PDF 软件

本文[1]是我们正在进行的有关Linux顶级工具系列的延续,在本系列中,我们将向您介绍最著名的Linux系统开源工具。随着互联网上越来越多地使用可移植文档格式(PDF)文件来获取在线书籍和其他相关文档,拥有PDF查看器/阅读器对于桌面Linux发行版非常重要。有几种可以在Linux上使用的PDF查看器/阅读器,它们都提

Excel VBA 变量,数据类型&常量

几乎所有计算机程序中都使用变量,VBA也不例外。在过程开始时声明变量是一个好习惯。这不是必需的,但有助于识别内容的性质(文本,​​数据,数字等)在本教程中,您将学习-一、VBA变量变量是存储在计算机内存或存储系统中的特定值。以后,您可以在代码中使用该值并执行。计算机将从系统中获取该值并显示在输出中。必须为每个变量指定一

热文推荐