006集 正则表达式 re 应用实例—python基础入门实例

正则表达式指预先定义好一个 字符串模板 ,通过这个 字符串模 板” 可以匹配、查找和替换那些匹配 字符串模板 的字符串。

Python的中 re 模块,主要是用来处理正则表达式,还可以利用 re 模块通过正则表达式来进行网页数据的爬取和存储。

正则表达式的英文是 regular expression,通常简写为 regex、regexp 或者RE,属于计算机领域的一个概念。

正则表达式的主要作用是被用来进行文本的检索、替换或者是从一个串中提取出符合我们指定条件的子串,它描述了一种字符串匹配的模式 pattern 。

目前正则表达式已经被集成到了各种文本编辑器和文本处理工具中。

下面给出一个简单的示例:

^[ 0 - 9 ] + a b c $

  • ^ 为匹配输入字符串的开始位置。

  •  [0-9] 匹配单个数字。

  • + 匹配一个或者多个。

  • [0-9]+匹配一个或多个数字。

  • $ 为匹配输入字符串的结束位置。

  • abc$匹配字母 abc 并以 abc 结尾。

^[a-zA-Z0-9_-]{3,15}$

  • ^表示匹配字符串的开头。
  • [a-zA-Z0-9_-] 表示字符集,包含小写字母、大写字母、数字、下划线和连接字符 -。
  • {3,15} 表示前面的字符集最少出现 3 次,最多出现 15 次,从而限制了用户名的长度在 3 到 15 个字符之间。
  • $ 表示匹配字符串的结尾。

^[0-9]+abc$

匹配以数字开头,并以 abc 结尾的字符串。

先介绍常用正则表达式中几种特殊字符的功能:

字符含义例子
.匹配任意一个字符ab.可以匹配abc或者abd

[ ]

[^ ]

匹配括号中的任意1个字符

匹配除了括号内的字符以外的任意一个字符

[abcd]可以匹配a、b、c、d

[^abc] 匹配除了字符 "a"、"b" 或 "c" 以外的任意字符。

-在[ ]内表示的字符范围内进行匹配[0-9a-fA-F]可以匹配任意一个16进制的数字
^位于[ ]括号内的开头,匹配除括号中的字符之外的任意1个字符[^xy]匹配xy之外的任意一个字符,比如[^xy]1可以匹配A1、B1但是不能匹配x1、y1

数量限定符

字符含义例子
匹配前面紧跟字符的0次或者1次[0-9]?,匹配1、2、3
+匹配前面紧跟字符的1次或者多次[0-9]+,匹配1、12、123等
*匹配前面紧跟字符的0次或者多次[0-9]*,不匹配或者12、123(待验证)
{N}匹配前面紧跟字符精确到N次[1-9][0-9]{2},匹配100到999的整数,{2}表示[0-9]匹配两个数字
{,M}匹配前面紧跟字符最多M次[0-9]{,1},指的是最多匹配0-9之间的1个整数,相当于是0次或者1次,等价于[0-9]?
{N,M}匹配前面紧跟字符的至少N次,最多M次[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3},匹配IP地址,其中.号是特殊字符,需要使用转义字符\

在 Python 中主要是利用 re 模块进行正则表达式的处理,涉及到 4 个常用的方法:

re.match()
re.search()
re.findall()
re.sub()
re.split()
import re   # 使用之前先进行导入re模块

re 模块简介

re模块主要定义了9个常量、12个函数、1个异常,每个常量和函数siki学院都会通过实际代码案例讲解,让大家能更直观的了解其作用!标准库的意思表示这是一个Python内置模块,不需要额外下载,目前Python内置模块大概有300个。可以在这里查看Python所有的内置模块:


re模块简介聊到Python正则表达式的支持,首先肯定会想到re库,这是一个Python处理文本的标准库。

re.match(pattern, string, flags)

参数描述
pattern匹配的正则表达式
string要匹配的字符串
flags标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

标志位 flags

正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志,如 re.I | re.M 被同时设置成 I 和 M 标志:

修饰符描述
re.I忽略大小写(常用)
re.L做本地化识别(locale-aware)匹配
re.M多行匹配,影响 ^ 和 $
re.S使 . 匹配包括换行在内的所有字符
re.U根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X该标志通过给予更灵活的格式,以便将正则表达式写得更易于理解。

 match

从指定字符串的开始位置进行匹配。开始位置匹配成功则继续匹配,否则输出None。

该方法的结果是返回一个正则匹配对象,通过两个方法获取相关内容:

  • 通过 group() 来获取内容
  • 通过 span() 来获取范围:匹配到字符的开始和结束的索引位置

re.match(pattern, string, flags)   # match方法为例

示例代码:

import re
print(re.match('www', 'www.bd.com').span())  # 在起始位置匹配
print(re.match('com', 'www.bd.com'))  # 不在起始位置匹配
line = "Cats are smarter than dogs"matchObj = re.match(r'(.*) are (.*?) .*', line, re.M | re.I)if matchObj:print("matchObj.group() : ", matchObj.group())print("matchObj.group(1) : ", matchObj.group(1))print("matchObj.group(2) : ", matchObj.group(2))
else:print("No match!!")

 运行结果:

(0, 3)
None
matchObj.group() :  Cats are smarter than dogs
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter

 re.match与re.search的区别
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

位置相关

字符含义例子
^匹配开头的位置;通过\A^hello 匹配hello开头的字符内容
$匹配结束的位置同\Z;$ 匹配一行结尾的;符号 ^$匹配空行
<匹配单词开头的位置<th 匹配…this但是不能匹配ethernet等
>匹配单词结尾的位置p> 匹配leap等,但是不能匹配parent、sleepy等不是p结尾的单词
\b匹配单词开头或结尾的位置\bat 匹配…at…,但是不能匹配cat、atexit、batch(非at开头)
\B匹配非单词开头或者结尾的单词\Bat匹配battery,但是不能匹配attend/hat等以at开头的单词

特殊字符

字符含义例子
\转义字符,保持后面字符的原义,使其不被转义\. 输出.
( )将表达式的一部分括起来,可以对整个单元使用数量限定符,匹配括号中的内容([0-9]{1,3}\.){3}[0-9]{1,3}表示将括号内的内容匹配3次
|连接两个子表达式,相当于或的关系n(o|either)匹配no或者neither
\d数字字符相当于是[0-9]
\D非数字字符相当于是[^0-9]
\w数字字母下划线[a-zA-Z0-9_]
\W非数字字母下划线,匹配特殊字符[^\w]
\s空白区域[\r\t\n\f]表格、换行等空白区域
\S[^\s]非空白区域

贪婪模式与非贪婪模式:

  • .*? 非贪婪模式
  • .* 贪婪模式

 

import re
str = "aaaacbabadceb"
res = re.findall("a.*?b", str)
res1 = re.findall("a.*b", str)
str2 = "aaaacbabadcebfegbbb"
res2 = re.findall("a.*b", str2)
print(res)
print(res1)
print(res2)

 运行结果为:

['aaaacb', 'ab', 'adceb']
['aaaacbabadceb']
['aaaacbabadcebfegbbb']

  1. 在上面的非贪婪模式中,使用了问号 ?,当匹配到 aaaacb 已经达到了要求,停止第一次匹配;接下来再开始匹配到 ab ;再匹配到 adceb ;所以存在多个匹配结果
  2. 在贪婪模式中,程序会找到最长的那个符合要求的字符串

 

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

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

相关文章

LT8911EX LVDS 转 eDP

概述 Lontium LT8911EX 是 LVDS 至 eDP 转换器&#xff0c;具有单端口或双端口可配置 LVDS 接收器&#xff0c;具有 1 个时钟通道和多达 8 个数据通道&#xff0c;每个数据通道的最大工作速率为 1.2Gbps&#xff0c;最大输入带宽为 9.6Gbps。该转换器对输入LVDS数据进行反串行…

【小黑嵌入式系统第十四课】μC/OS-III程序设计基础(三)——信号量(任务同步资源同步)、事件标记组(与或多个任务)

上一课&#xff1a; 【小黑嵌入式系统第十三课】PSoC 5LP第二个实验——中断控制实验 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff1a;人工智能 文章目录 1 信号量1.1 简介1.2…

学习笔记之——3D Gaussian Splatting源码解读

之前博客对3DGS进行了学习与调研 学习笔记之——3D Gaussian Splatting及其在SLAM与自动驾驶上的应用调研-CSDN博客文章浏览阅读450次。论文主页3D Gaussian Splatting是最近NeRF方面的突破性工作&#xff0c;它的特点在于重建质量高的情况下还能接入传统光栅化&#xff0c;优…

探索大模型时代下的文档识别与分析【GPT4-V带来的挑战与机遇】

中国图象图形学学会青年科学家会议是由中国图象图形学学会青年工作委员会发起的学术会议。本会议面向国际学术前沿与国家战略需求&#xff0c;致力于支持图象图形领域的优秀青年学者&#xff0c;为青年学者们提供学术交流与研讨的平台&#xff0c;促进学者之间的交流与合作。会…

深入理解C#中的引用类型、引用赋值以及 `ref` 关键字

深入理解C#中的引用类型、引用赋值以及 ref 关键字 在C#编程中&#xff0c;理解引用类型、引用赋值以及 ref 关键字的使用对于编写高效、可靠的代码至关重要。本文将深入探讨这些概念&#xff0c;帮助您更好地理解C#的工作原理。 引用类型简介 在C#中&#xff0c;所有的类型都…

MySQL的事务机制

一、事务机制简述 事务机制,避免写入直接操作数据文件&#xff1b;利用日志来实现间接写入&#xff0c;与事务有关的, redo日志与undo日志&#xff1b;sql语句操作记录复制到undo日志然后增删改查操作的结果会记录在redo日志&#xff0c;如果操作没有什么问题就把数据同步到数…

综合指南:理解气体检测仪的关键功能和单位换算

随着科技的飞速发展&#xff0c;气体检测仪在各行各业中的应用已十分普遍&#xff0c;其主要用途是检测环境中的气体浓度。 1、检测气体纯度 主要用于气体储罐、管道等储运设备中检测气体的纯度&#xff0c;一般都是专门针对高纯气体的浓度值进行检测&#xff0c;常见的如氩气…

C语言数组基础知识

目录 一维数组&#xff1a; 一维数组的创建&#xff1a; 一维数组的访问&#xff1a; 一维数组在内存中的存储&#xff1a; 二维数组&#xff1a; 二维数组的创建&#xff1a; 二维数组的初始化&#xff1a; 二维数组的使用&#xff1a; 二维数组在内存中的存储&#x…

上海晋名室外暂存柜助力石墨烯材料行业气瓶储存安全

近日上海晋名又有一台室外气瓶暂存柜项目通过验收&#xff0c;此次项目主要用于石墨烯材料行业气瓶的室外暂存。 用户单位创立于2017年&#xff0c;是一家从事石墨烯等新材料技术的科技型高新技术企业。 上海晋名作为一家专注工业安全防护领域&#xff0c;危险化学品安全储存…

RocketMQ Dashboard可视化工具

RocketMQ Dashboard 将 RocketMQ的相关指标展示在web页面 &#xff0c;支持以可视化工具代替 Topic 配置、Broker 管理等命令行操作。 官方文档地址&#xff1a;RocketMQ Dashboard | RocketMQ 目录 1.下载安装 1.1 系统要求&#xff1a; 1.2 源码安装 1.3 访问页面 2.功…

如何搭建开源知识库软件AFFiNE并实现公网环境远程协作【内网穿透】

目录 前言 1. 使用Docker安装AFFINE 2. 安装cpolar内网穿透工具 3. 配置AFFINE公网访问地址 4. 实现公网远程访问AFFINE 结语 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业应届生 今天给大家聊聊如何搭建开源知识库软件AFFiNE并实现公网环境远程协作【内网穿…

借势API电商数据采集汇总分析

电商数据采集的网页抓取数据、淘宝、天猫、京东等平台的电商数据抓取&#xff0c;网页爬虫、采集网站数据、网页数据采集软件、python爬虫、HTM网页提取、APP数据抓包、APP数据采集、一站式网站采集技术、BI数据的数据分析、数据标注等成为大数据发展中的热门技术关键词。那么电…

使用python读取yaml文件数据

使用python读取yaml文件&#xff1a; yaml文件数据&#xff1a;data.yaml login_data:url: http://www.baidu.comcase1:user1: password1: 12345errorText: 请输入用户名case2:user2: adminpassword2: errorText: 请输入密码case3:user3: adminpassword3: 123456errorText: 登…

19. 从零用Rust编写正反向代理, 配置数据的热更新原理及实现

wmproxy wmproxy是由Rust编写&#xff0c;已实现http/https代理&#xff0c;socks5代理&#xff0c; 反向代理&#xff0c;静态文件服务器&#xff0c;内网穿透&#xff0c;配置热更新等&#xff0c; 后续将实现websocket代理等&#xff0c;同时会将实现过程分享出来&#xff…

探索 Java 8 中的 Stream 流:构建流的多种方式

目录 前言 什么是 Stream 流&#xff1f; 创建 Stream 流 1. 从集合创建 Stream 2. 从数组创建 Stream 3. 使用 Stream.of 创建 Stream 4. 使用 Stream.generate 创建 Stream 5. 使用 Stream.iterate 创建 Stream Stream 流的操作 1. 过滤数据 2. 映射数据 …

01 ZigBee开发环境IAR搭建

链接&#xff1a;https://pan.baidu.com/s/18l8z9qajPBj2X5WzgjT0TA?pwd41qc 提取码&#xff1a;41qc 注意&#xff1a;安装包和注册机都要右击用管理员权限打开&#xff0c;安装过程中关闭杀毒软件&#xff08;否则后续程序不行&#xff09; 安装IAR-8051 以管理员身份运行E…

鸿蒙开发已解决-arkts编译报错-arkts-limited-stdlib错误

文章目录 项目场景:问题描述原因分析:解决方案:适配指导案例此Bug解决方案总结项目场景: arkts编译报错-arkts-limited-stdlib错误。 我用Deveco studio4.0 beta2开发应用,报arkts-limited-stdlib错误 报错内容为: ERROR: ArKTS:ERROR File: D:/prRevivw/3792lapplica…

行列式的计算

1、基本性质&#xff1a; 1&#xff09;行列式转置相等 2&#xff09;任意两行&#xff08;列&#xff09;成比例&#xff0c;行列式为0 3&#xff09;对换任意某两行&#xff08;列&#xff09;&#xff0c;行列式变号 4&#xff09;某一行&#xff08;列&#xff09;乘某…

Ubuntu下VsCode+CMake 交叉编译

参考连接&#xff1a; Ubuntu下VsCodeCMake 交叉编译 VSCode与CMake搭配使用之基本配置 VSCode与CMake搭配使用之交叉编译 step1: CtrlShiftp打开VSCode的指令面板&#xff0c;然后输入cmake:q ; 在窗口搜索&#xff1a;“ >CMake:Edit user-loacl CMake kits ”会打开一个…

SpringBoot集成阿里云短信实现发送短信验证码

SpringBoot集成阿里云短信实现发送短信验证码 一、准备工作1、注册账号2、申请资质3、申请签名4、创建模板 二、springboot集成发送短信1、引入依赖2、编写短信配置文件3、编写短信发送工具类 一、准备工作 在使用springboot集成短信服务之前&#xff0c;需要先注册阿里云的账…