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. 在贪婪模式中,程序会找到最长的那个符合要求的字符串

 

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

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

相关文章

NUS CS1101S:SICP JavaScript 描述:三、模块化、对象和状态

原文&#xff1a;3 Modularity, Objects, and State 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 变化中安宁 &#xff08;即使它在变化&#xff0c;它仍然保持不变。&#xff09; ——赫拉克利特 变化越大&#xff0c;越是相同。 ——阿方斯卡尔 前面的章节介绍了构…

C++学习笔记——友元、嵌套类、异常

目录 一、友元 一个使用友元的示例代码 输出结果 二、嵌套类 一个使用嵌套类的示例代码 输出结果 三、异常 一个使用异常处理的示例代码 输出结果 四、结论 五、使用它们的注意事项 上一篇文章链接&#xff1a; C中的继承和模板是非常强大和灵活的特性&#xff0c;它…

C++学习笔记——标准模板库

目录 一、简介 二、STL概述 2.1STL是什么&#xff1f; 2.2STL的优势 三、容器&#xff08;Containers&#xff09; 3.1序列式容器&#xff08;Sequence Containers&#xff09; 3.2关联式容器&#xff08;Associative Containers&#xff09; 3.3容器适配器&#xff08;…

轻松批量重命名不同路径文件:从1到N的单独编号指南

在处理大量文件时&#xff0c;有时要批量重命名这些文件。整理、归档或是进行其他类型的处理。但不同的文件可能位于不同的路径下&#xff0c;增加了批量重命名的复杂性。下面来看云炫文件管理器如何批量重命名不同路径下的文件&#xff0c;从1到N单独编号的方法。 不同路径文件…

考研经验总结——目录

文章目录 一、写作顺序二、个人情况说明三、读评论四、一些小牢骚五、一些注意事项&#xff08;持续更新&#xff09; 一、写作顺序 我将准备从三个阶段开始介绍吧 考研前考研中考研后&#xff08;也就是现在我的这种情况&#xff09; 考研前我会分为&#xff1a;数学、专业…

三轴加速度计LIS2DW12开发(3)----检测活动和静止状态

e2studio开发三轴加速度计LIS2DW12.3--检测活动和静止状态 概述视频教学样品申请源码下载新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置UART配置UART属性配置设置e2studio堆栈e2studio的重定向printf设置R_SCI_UART_Open()函数原型回调函数user_uart_callback ()…

vue3+vite开发生产环境区分

.env.development VITE_APP_TITLE本地.env.production VITE_APP_TITLE生产-ts文件中应用 console.log(import.meta.env.VITE_APP_TITLE)在html中应用&#xff0c;需要安装 html 模板插件 pnpm add vite-plugin-html -Dvite.config.ts中 import { createHtmlPlugin } from v…

python|切片

切片的语法格式 object[start_index:end_index:step] &#xff08;1&#xff09;step步长&#xff1a;有正负&#xff0c;正表示正着走&#xff0c;负表示负着走&#xff0c;步长的绝对值代表一步走的距离。 &#xff08;其中&#xff0c;在深度学习中卷积也有步长的说法&…

从比特币、以太坊生态,到AI与新公链复兴,谁将接棒2024年的主流叙事?

2023年10月份至今&#xff0c;现货比特币ETF一直都是促使市场反弹的核心叙事之一&#xff0c;如今靴子终于落地&#xff0c;那在ETF预期尘埃落定的大背景下&#xff0c;接下来的加密市场有哪些赛道值得关注&#xff1f; 泛比特币生态 2023年比特币生态浪潮中&#xff0c;OKX等赢…

什么是数通技术?以太网交换机在数通技术中的精要

什么是数通技术&#xff1f; 数通技术是指数字通信技术&#xff0c;它涵盖了数字信号处理、数据传输、网络通信等领域。通信工程师在数通技术中负责设计、建设和维护数字通信系统&#xff0c;以实现可靠、高效的信息传输。这涉及到数字信号的编解码、调制解调、数据压缩、网络…

【论文解读】SiamMAE:用于从视频中学习视觉对应关系的 MAE 简单扩展

来源&#xff1a;投稿 作者&#xff1a;橡皮 编辑&#xff1a;学姐 论文链接&#xff1a;https://siam-mae-video.github.io/resources/paper.pdf 项目主页&#xff1a;https://siam-mae-video.github.io/ 1.背景 时间是视觉学习背景下的一个特殊维度&#xff0c;它提供了一…

QT上位机开发(加密和解密)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 加密和解密是我们在软件开发中经常遇到的一种情形。最早的时候&#xff0c;加密是用在军事上面。现在由于各个行业、各个公司之间的竞争也非常激烈…

Kafka的安装、管理和配置

Kafka的安装、管理和配置 1.Kafka安装 官网: https://kafka.apache.org/downloads 下载安装包,我这里下载的是https://archive.apache.org/dist/kafka/3.3.1/kafka_2.13-3.3.1.tgz Kafka是Java生态圈下的一员&#xff0c;用Scala编写&#xff0c;运行在Java虚拟机上&#xf…

不会 python 语言没关系,GPT 会呀

在日常办公或者是编程过程中&#xff0c;经常要处理一些琐碎的任务。就拿编程来说&#xff0c;假如你现在收到一个任务&#xff0c;要提取源代码中所有的字符串&#xff0c;进行国际化。 一般来说&#xff0c;很多软件开发工具提供了国际化方案&#xff0c;比如 QT&#xff0c;…

x-cmd pkg | fx - Warp 支持的 JSON 查看和处理工具

目录 简介首次用户功能特点类似工具与竞品进一步探索 简介 fx 是一款由专为 JSON 定制的双用途命令行工具&#xff0c;提供基于终端的 JSON 查看器和 JSON 处理实用程序。虽然 JSON 查看器是用 Go 编写的&#xff0c;并且无需外部依赖即可运行&#xff0c;但 JSON 处理工具是用…

openGauss学习笔记-196 openGauss 数据库运维-常见故障定位案例-强制结束指定的问题会话

文章目录 openGauss学习笔记-196 openGauss 数据库运维-常见故障定位案例-强制结束指定的问题会话196.1 强制结束指定的问题会话196.1.1 问题现象196.1.2 处理办法 openGauss学习笔记-196 openGauss 数据库运维-常见故障定位案例-强制结束指定的问题会话 196.1 强制结束指定的…

实验室服务器升级

cuda、python、pytorch 版本兼容查看顺序及网站 任务&#xff1a; 在一个有GPU的电脑上安装pytorch时选择合适版本。 简述&#xff1a; 安装 pytorch 时&#xff0c;若要使用 GPU&#xff0c;需要考虑与 CUDA&#xff0c;python 的版本兼容情况。推荐考虑顺序&#xff1a;CUD…

NUS CS1101S:SICP JavaScript 描述:四、元语言抽象

原文&#xff1a;4 Metalinguistic Abstraction 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 …魔法就在于文字——Abracadabra&#xff0c;开门&#xff0c;以及其他——但一个故事中的魔法词在另一个故事中并不神奇。真正的魔法是理解哪些词起作用&#xff0c;何时…

Jenkins创建maven项目

Jenkins创建maven项目 环境准备 如果在项目没有看到maven&#xff0c;需要下载插件 本机需要有maven&#xff0c;并且maven配置过国内镜像&#xff0c;否则很大概率插件下不下来&#xff0c;如果有docker之前没有配置过需要进入docker手动配置。 需要在全局中配置maven的set…

Kubernetes (十一) 存储——Secret配置管理

一. 简介 从文件创建 echo -n admin > ./username.txt echo -n westos > ./password.txt kubectl create secret generic db-user…