python---正则表达式

==本章目标:

1:能够知道在Python中使用正则要导入的模块; [了解]
    re模块
2:能够使用re模块匹配单个字符; [重点]
    \d  \w

 正则表达式的概述:

基本介绍

正则表达式,也叫做规则表达式,通常会说成[正则]

实际上正则表达式就是指符合一定规则的字符串,同时他能用于检查一段文本数据是否与某种模式匹配.

比如,在网站注册新用户时,对用户名,手机号等的验证就使用了正则表达式

在python里有一个专门处理正则表达式的模块:

#导入模块

import  re

在正则表达式中,可以使用单个字符或一段字符串来匹配满足正则规则的文本数据。而我们要学习的,就是正则规则。

==总结:==

(1)正则表达式就是一段具有特殊含义的字符串,即正则表达式 == 字符串;

(2)注意:在Python中,若要操作正则表达式,要使用()模块。==A、re==;B、regex。

--掌握--快速使用re模块

==目标:==掌握re模块的快速使用。

我们已经知道,可以使用re模块来操作正则表达式。

re模块常用方法:

函数名含义
match(pattern, string)返回一个已匹配成功的对象。其中,参数pattern表示正则字符串,参数string表示要匹配的内容。

当成功匹配数据后,结果存放在对象的函数:

函数名含义
group(num=0)匹配成功的内容,num默认是0,表示匹配的所有数据结果。

例如,一起来完成:

(1)使用正则快速验证手机号码是否合格;

(2)验证手机是否合格的条件有:手机号码以1开头且总位数为11位,全部为数字且不包含其他字符;

(3)根据要求,使用re模块完成对手机号码的验证。

import re

str1 = '13812345678'
regex_str = '1[3456789][0-9]{9}'  # 这种写法没有定义开头结尾限定,只要包含匹配的内容就行
regex_str = '^1[3456789][0-9]{9}$'  # 这种写法佳乐开头结尾限定,必须精准匹配才行

result = re.match(regex_str,str1)  # 判断str1这个字符串是否符合regex_str这个正则规则
if result is not None:
    print('字符串内容符合正则!')
    print(result.group())  # group 表示只获取字符串中匹配上的部分
else:
    print('字符串内容不符合正则!')

==总结:==

(1)如果要使用re模块来匹配数据,应该使用re模块的()匹配方法;==A、match()==;B、findall()。

(2)注意:当使用re模块未匹配到对应的数据时,会返回None。

正则的常见规则

[掌握]匹配单个字符

==目标:==掌握单个字符的数据匹配。

常用的匹配单个字符的语法:

代码功能
.匹配除\n之外的任何单个字符。
[ ]匹配[ ]中列举的字符。
\d匹配一个数字字符,比如[0-9]。
\D匹配一个非数字字符,比如[^0-9]
\s匹配任何空白字符。(空格、tab、换行)
\S匹配任何非空白字符。
\w匹配非特殊字符,比如a-z、A-Z、0-9、_、汉字。
\W匹配特殊字符,比如非字母、非数字、非汉字等。

例如,一起来完成:

(1)使用.来匹配任意单个字符;

(2)使用[a-z]、[A-Z]、[^0-9]分别来查看小写字母、大写字母、非数字;

(3)使用\d来匹配一个数字字符;

(4)使用\w来匹配一个可能有数字、大小写字母、下划线的单个字符。

# 1.导入模块
import re

# 报错:正则有误;  能输出结果,表示正常
# print(f"结果:{xxx}")

# 2.任意字符
# print(f"结果:{re.match('.','h').group()}")
# print(f"结果:{re.match('.','1').group()}")
# print(f"结果:{re.match('.','_').group()}")
# print(f"结果:{re.match('.','python').group()}")

# 3.小写、大写、非数字
# print(f"结果:{re.match('[a-z]','a').group()}")
# print(f"结果:{re.match('[a-z]','y').group()}")
# print(f"结果:{re.match('[a-z]','Z').group()}")   # 报错
# print(f"结果:{re.match('[a-z]','abc').group()}")
# print(f"结果:{re.match('[A-Z]','B').group()}")
# print(f"结果:{re.match('[0-9]','1').group()}")
# print(f"结果:{re.match('[^0-9]','b').group()}")
# print(re.match('\D','b').group())

# 4.一个数字
# print(f"结果:{re.match('[0-9]','8').group()}")
# print(f"结果:{re.match('[0-9]','66').group()}")
# print(re.match('\d','6').group())
# 5.单字符
# print(re.match('\w','6').group())
# print(re.match('\w','a').group())
# print(re.match('\w','N').group())
# print(re.match('\w','_').group())
# print(re.match('\w','深圳').group())

==总结:==

(1)注意:使用匹配单个字符的方式,只能匹配一个字符内容;

(2)当要匹配除\n外的任何字符,可以使用(.);当要匹配非特殊字符(比如字母、数字、下划线或汉字等),可以使用(\w)。A、.;B、\w。

[了解]原始字符串

==目标:==了解原始字符串的简单使用。

原始字符串指的是:在所有的正则表达式前,最好加上r,语法:

r"正则表达式"

例如,一起来完成:

(1)请使用正则来匹配路径名:E:\\

(2)请尝试使用不同方式去匹配数据,观察效果;

(3)思考:当要定义一段批量文本内容时,该怎么定义字符串?

print('E:\a.txt')    # 这里 会把 \a 当成一个字符, \是转义字符
print('E:\\a.txt')   # \\ 合成 一个  \
print(r'E:\a.txt')   # 前边加 r 表示 字符串中的任何字符没有特殊函数,就是普通字符串,不要过度解读

==总结:==

(1)当不想给一段文本数据内容转义而又要表达原始意义时,可以在文本数据内容前添加();A、w;==B、r==。

(2)注意:当正确写了正则后又匹配不出数据结果时,可以试试在正则前添加r解决问题。

[掌握]匹配多个字符

==目标:==掌握多个字符的数据匹配。

常用的匹配多个字符的语法:

代码功能
X*匹配X出现0次或无限次,即可有可无。
X+匹配X出现1次或无限次,即至少有1次。
X?匹配X出现1次或0次,即有一次或一次也没有。
X{m}匹配X恰好出现m次。
X{m,n}匹配X至少m次,但是不超过n次。

例如,一起来完成:

(1)使用X*来匹配出一个字符串:第1个字母为大小写字母,后面都是小写字母且这些字母可有可无;

(2)通过X+来匹配一个具有数字、大小写字母、下划线的字符串;

(3)通过X?来匹配0到99之间的任意数字;

(4)通过X{n,m}匹配出5到16位的密码,可以是大小写英文字母、数字、下划线。

import re

# result = re.match("","").group()
# print(f"结果:{result}")
# X*
# result = re.match("[a-zA-Z]","x").group()
# result = re.match("[a-zA-Z]","U").group()
# result = re.match("[a-zA-Z][a-z]*","U").group()
# result = re.match("[a-zA-Z][a-z]*","UzogY").group()
# print(f"结果:{result}")
# X+
# result = re.match("\w","123abcABC_hello").group()
# result = re.match("\w+","123abcABC_hello").group()
# print(f"结果:{result}")
# X?    0-9    10-99
# result = re.match("[1-9][0-9]","12").group()
# result = re.match("[1-9][0-9]","98").group()
# result = re.match("[1-9]?[0-9]","0").group()
# result = re.match("[1-9]?[0-9]","17").group()
# # result = re.match("[1-9]?[0-9]","09").group()
# print(f"结果:{result}")
# X{m,n}
# result = re.match("[a-zA-Z0-9_]{5,16}","123456").group()
result = re.match("[a-zA-Z0-9_]{5,16}","1234fjwoefwoe23__fwjelf").group()   # ?如何解决?  $
print(f"结果:{result}")

==总结:==

(1)使用匹配多个字符的方式,可以一个字符或批量数据内容;

(2)注意:当要匹配批量数据内容时,应该优先使用:()。A、*;==B、+==。

[了解]匹配开头和结尾

==目标:==了解文本数据开头和结尾的匹配。

匹配开头和结尾语法:

代码功能
^匹配字符串开头。
$匹配字符串结尾。

例如,一起来完成:

(1)使用^来匹配非数字的单个字符;

(2)使用$来匹配www.baidu.com的结尾处。

import re
​
# result = re.match("","").group()
# print(f"结果:{result}")
​
​
# 匹配开头: 非数字
result = re.match("[0-9]","1aaa1").group()    # 默认是从第一个字符开始匹配,如果第一个字符不是数字就结束
print(f"结果:{result}")
​
result = re.match("[^0-9]","g").group()    # 默认是从第一个字符开始匹配
print(f"结果:{result}")
​
result = re.match("[^0-9]","heima").group()  # 默认是从第一个字符开始匹配
print(f"结果:{result}")
​
result = re.match("[^0-9]+","heima").group()  # 默认是从第一个字符开始匹配
print(f"结果:{result}")
​
print('----------------------')
# 匹配结尾
result = re.match(".+","www.baidu.com").group()
print(f"结果:{result}")
​
result = re.match("www.baidu.com","www.baidu.com").group()
print(f"结果:{result}")
​
result = re.match("www.baidu.com$","www.baidu.com.cn.gov.edu").group()  # 是否以某个串结尾
print(f"结果:{result}")
​
result = re.match("^www.baidu.com$","www.baidu.com").group()
print(f"结果:{result}")

==总结:==

(1)当要限定结尾处内容时,可以使用()符号。A、b;==B、$==。

[掌握]匹配分组

==目标:==掌握分组数据的匹配使用。

要获取分组数据信息,语法:

代码功能
X|Y匹配X或Y的任意一个表达式。
(X)将括号中字符X作为一个分组用于获取,且从1开始统计分组。

例如,一起来完成:

(1)使用X|Y来匹配出0-100之间的所有数字字符结果;

(2)使用(X)来匹配出含有163、126、qq这几个内容且用户名位数为4-12位的邮箱,如itcast@163.com等。

import re
​
result = re.match("","").group()
print(f"结果:{result}")
​
0-100
result = re.match("hello|world","world").group()  # 只要hello和world有一个匹配上即可
print(f"结果:{result}")
​
result = re.match("[1-9]?[0-9]|100","8").group()
print(f"结果:{result}")
​
result = re.match("[1-9]?[0-9]|100","87").group()
print(f"结果:{result}")
​
result = re.match("[1-9]?[0-9]|100","99").group()
print(f"结果:{result}")
​
result = re.match("[1-9]?[0-9]|100","100").group()  # 10
print(f"结果:{result}")
​
result = re.match("100|[1-9]?[0-9]","100").group()
print(f"结果:{result}")
​
result = re.match("100|[1-9]?[0-9]","10").group()
print(f"结果:{result}")
print('----------------------------------------')
# 邮箱号
result = re.match("(\w{4,12})@(126|163|qq).(com|cn)","hellopy@qq.com").group()
print(result)
print(f"结果:{result[:result.find('@')]}")
​
​
       #  re.match('xxxx(表达式1)xxxx(表达式2)',字符串).group(1)
       # group(2) 里边的数字表示获取第2个括号中的内容
result = re.match("(\w{4,12})@(126|163|qq).com","hellopy@163.com").group(2)
print(result)
print(f"结果:{result[:result.find('@')]}")
​
​
result = re.match("(\w{4,12})@(126|163|qq).com","hellopy@163.com").group(1)
print(f"结果:{result[:result.find('@')]}")
​
result = re.match("(\w{4,12})@(126|163|qq).com","hellopy@163.com").group(2)
print(f"结果:{result[:result.find('@')]}")
​
# group 中不加数字,返回匹配的所有内容
result = re.match("(\w{4,12})@(126|163|qq).com","hellopy@qq.com").group()
print(result)
print(f"结果:{result[:result.find('@')]}")
​

==总结:==

(1)如果在涉及到要获取分组数据时,一定记得要使用()来写正则;

(2)注意:要获取分组数据时,在正则中的()从1开始计算分组,比如获取第1组,则group()的括号中应该填写()。==A、1==;B、2。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis拦截器使用方法

前言 MyBatis拦截器可以做的工作:SQL修改,分页操作,数据过滤,SQL执行时间性能监控等。 1. 基础介绍 1.1. 核心对象 从MyBatis代码实现的角度来看,MyBatis的主要的核心部件有以下几个: Configuration&am…

OpenStack所支持的虚拟化技术和KVM、Xen、Hyer-V、QEMU、Libvirt说明

OpenStack所支持的虚拟化技术主要包括以下几种: KVM (Kernel-based Virtual Machine): 基于Linux内核的虚拟化技术。在Linux内核中添加一个虚拟化模块来实现虚拟机的运行。是OpenStack用户使用较多的虚拟化技术,支持OpenStack的所有特性。通过QEMU模拟器…

【NoSQL数据库】Redis——哨兵模式

Redis——哨兵模式 Redis哨兵 Redis——哨兵模式1.什么是哨兵机制(Redis Sentinel)1.1 哨兵的作用 2.哨兵的运行机制3.故障处理redis常见问题汇总1、redis缓存击穿是什么?如何解决?2、redis缓存穿透是什么?如何解决&am…

详解!Python怎么配置环境变量

详解!Python怎么配置环境变量 许多刚开始学习编程的初学者在 python的安装上会抱有一定的疑惑,为什么明明已经安装好了 python 环境,但并不能运行python 代码,这是因为 python 的安装过程中还有一步环境变量的配置,接…

微信“对方正在输入”背后的小心思:保持隐秘感,享受宁静的交流

微信,这个伴随我们起居、工作的超级应用,不仅仅是一款聊天软件,它几乎成为了我们社交生活的一部分。它的便捷,让我们的日常沟通如鱼得水。然而,在这个几乎完美的社交工具中,有一个功能,让不少人…

CSS真题合集(二)

CSS真题合集(二) 11. css3新增特性12. css3动画12.1 关键帧动画 (keyframes)12.2 animation12.3 transition12.4 transform 13. grid网格布局13.1 使用display: grid或display: inline-grid的HTML元素。13.2 定义网格13.3 13.4 自动填充和自动放置13.4 对…

信号发生器如何将频率调大,步尽值改成10

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

PPT文件损坏且无法读取怎样修复?文档损坏修复方法推荐

PPT文件已经成为工作汇报、商务演示、学术交流以及教学培训中最常用到的文件,随着文件数量的增多和存储设备的频繁使用,我们有时会遇到PPT文件损坏无法打开的情况,这无疑给工作和学习带来了极大的困扰。 PPT文件损坏的原因可能多种多样&#…

FreeRTOS手表项目多级菜单的实现

一、首先介绍一下智能手表项目的背景: 如图,关注焦点是任务: 1、在一个确定时刻,在那一圈任务中(写有只有一个任务解挂)只有一个任务处在运行,界面显示的是该任务应该显示的内容; …

韩国Neowine推出第三代强加密芯片ALPU-CV

推出第三代加密芯片;是ALPU系列中的高端IC;是一款高性能车规级加密芯片;其加密性更强、低耗电、体积小;使得防复制、防抄袭板子的加密性能大大提升,该芯片通过《AEC-Q100》认证,目前已经在国产前装车辆配件…

代理记账公司哪家好,深度剖析与选择指南

代理记账,作为企业会计管理和运营的重要环节,已经逐渐被越来越多的企业所重视,在众多的代理记账公司中,如何选择一家专业、高效且值得信赖的代理记账机构呢?以下是一些深度解析和推荐。 公司的规模 规模较大的代理记账…

docker实战命令大全

文章目录 1 环境准备1.1 移除旧版本Docker1.2安装工具包1.3配置docker yum源 2 安装最新docker2.1 设置开机自启docker2.2配置加速器 3 实操-镜像3.1搜索镜像3.2下载镜像3.3查看镜像3.4 删除镜像 4 实操-容器4.1运行nginx容器4.2 查看容器4.3启动容器4.5关闭容器4.6查看容器日志…

Linux中Apache网站基于Http服务的访问限制(基于地址/用户)

🏡作者主页:点击! 👨‍💻Linux高级管理专栏:点击! ⏰️创作时间:2024年6月3日11点44分 🀄️文章质量:95分 为了更好地控制对网站资源的访问,可…

基于SSM+Jsp的高校二手交易平台

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…

前端怎么预览pdf

1.背景 后台返回了一个在线的pdf地址,需要我这边去做一个pdf的预览(需求1),并且支持配置是否可以下载(需求2),需要在当前页就能预览(需求3)。之前我写过一篇预览pdf的文…

ant design的upload组件踩坑记录

antd版本 v4.17.0 1.自定义了onpreview和onchange事件,上传文件后,文件显示有preview的icon但是被禁用,无法调用onpreview事件。 问题展现: 苦苦查找原因,问题出在了这里,当文件没有url的时候&#xff0c…

基于FPGA的图像一维FFT变换IFFT逆变换verilog实现,包含tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 fpga仿真结果 matlab调用FPGA的仿真结果进行图像显示 2.算法运行软件版本 vivado2019.2 matlab2022a 3.部分核心程序 ......................…

mac系统内存占用过高怎么办 优化电脑内存的方法系统加速

不少Mac用户都对mac系统内存占用过高非常头痛,不过这是mac在使用过程中一个很常见的问题,它会影响用户的操作体验,导致系统运行速度缓慢,甚至出现明显的卡顿现象。面对mac系统内存占用过高怎么办这个问题,其实很好解决…

C#操作MySQL从入门到精通(11)——对查询数据使用正则表达式过滤

前言 对于之前提到的使用匹配、比较、通配符等过滤方式能解决大部分的项目问题,但是有时候也会遇到一些比较复杂的过滤需求,这时候就需要正则表达式来实现了,正则表达式使用regexp这个关键字来实现。 本次测试的数据库表的内容如下: 1、基本字符匹配(包含某些字符) 匹…

git一次提交多个项目之windows

方案1:【快速】单个/多个项目提交到一个已有地址 步骤: 1,在git仓库,创建新的地址 2,在代码所在文件夹,编辑脚本 2.1,获得所有文件名:编写bat脚本,获得所有文件名称【非必须】; dir *.* /b/s>test.txt 获取所有文件之后,复制对应的文件名; 2.2,编写bat脚…