python 之 正则表达式模块re

文章目录

  • findall
      • 例子:
      • 特点和注意事项:
  • match
      • 示例:
      • `match` 对象的方法和属性:
      • 注意事项:
  • search
      • 示例:
      • `match` 对象的方法和属性:
      • 注意事项:
  • split
      • 示例:
      • 参数说明:
      • 注意事项:
      • 示例说明:
  • sub
      • 示例:
      • 参数说明:
      • 可选参数:
      • 示例说明:

在这里插入图片描述

正则表达式(Regular Expression,简称为 regex 或 regexp)是用于在文本中匹配模式的特殊字符串表达式。Python 中的 re 模块是用来处理正则表达式的工具,它提供了一种灵活、强大的方式来搜索、替换和操作文本数据。

findall

re.findall() 是 Python re 模块中一个常用的函数,用于在字符串中查找所有与给定正则表达式模式匹配的内容,并返回一个包含所有匹配项的列表。它的基本语法如下:

re.findall(pattern, string)
  • pattern 是一个正则表达式,用来描述你想要匹配的模式。
  • string 是你要搜索的目标字符串。

例子:

假设有一个文本包含多个 email 地址,我们想要提取出这些 email 地址:

import re

text = "Email me at test@example.com or test2@example.com for more information."

emails = re.findall(r'\S+@\S+', text)
print(emails)
  • \S+@\S+ 是一个简单的正则表达式模式,它匹配一个非空白字符序列,然后是 @ 符号,再后面跟着另一个非空白字符序列。这个模式描述了基本的 email 地址格式。

re.findall() 返回一个列表,其中包含在 text 中找到的所有与模式匹配的 email 地址。

特点和注意事项:

  1. 返回列表:re.findall() 返回所有匹配项组成的列表。
  2. 不返回匹配对象:与 re.search()re.match() 不同,findall() 不返回匹配对象,而是返回匹配的字符串本身。
  3. 模式中的分组:如果模式中有分组 ( )re.findall() 会返回元组的列表,每个元组包含匹配到的分组内容。
import re

text = "John has 3 cats, Jane has 2 dogs."
matches = re.findall(r'(\d+)\s(\w+)', text)
print(matches)  # Output: [('3', 'cats'), ('2', 'dogs')]

这个例子中,正则表达式 (\d+)\s(\w+) 匹配了一些数字和接着的字母单词,并且使用了分组。re.findall() 返回了包含每个匹配组合的元组列表。

re.findall() 在处理文本、数据抽取、简单的文本匹配等任务中都非常有用,但要注意在处理复杂匹配模式时,可能需要更深入的了解和测试正则表达式。

match

re.match() 是 Python 中 re 模块的一个函数,用于在字符串的开头位置查找是否有符合给定正则表达式模式的内容。这个函数尝试从字符串的起始位置开始匹配模式,如果找到匹配,它将返回一个匹配对象;如果没有找到匹配,则返回 None

这是 re.match() 函数的基本语法:

re.match(pattern, string)
  • pattern 是一个正则表达式,用于描述你想要匹配的模式。
  • string 是要搜索的目标字符串。

示例:

假设我们想要验证一个字符串是否以 “Hello” 开头:

import re

text = "Hello, how are you?"
match = re.match(r'Hello', text)

if match:
    print("Pattern found:", match.group())
else:
    print("Pattern not found.")

在这个例子中,re.match() 尝试从字符串的开头匹配模式 “Hello”。如果找到匹配,它会返回一个匹配对象,否则返回 None

match 对象的方法和属性:

  • group(): 返回与整个匹配的字符串。
  • start(): 返回匹配的起始位置。
  • end(): 返回匹配的结束位置。
  • span(): 返回一个元组,包含匹配 (开始, 结束) 的位置。
import re

text = "Hello, how are you?"
match = re.match(r'Hello', text)

if match:
    print("Matched string:", match.group())
    print("Start position:", match.start())
    print("End position:", match.end())
    print("Position span:", match.span())

注意事项:

  1. re.match() 只在字符串的开头位置进行匹配。如果你想要在整个字符串中查找匹配,可以使用 re.search()
  2. 如果匹配成功,re.match() 返回的是一个匹配对象,你可以使用它的方法来获取匹配结果,如 group()start() 等。
  3. 如果没有找到匹配,re.match() 将返回 None

re.match() 对于需要精确匹配字符串开头的情况非常有用,但如果你需要在字符串中间或结尾位置进行匹配,可以考虑使用 re.search() 函数。

search

re.search() 是 Python 中 re 模块的函数之一,用于在给定的字符串中搜索匹配指定正则表达式模式的内容。与 re.match() 不同,re.search() 不仅仅在字符串的开头进行匹配,而是搜索整个字符串,找到第一个匹配项后便停止搜索,并返回一个匹配对象。

这是 re.search() 函数的基本语法:

re.search(pattern, string)
  • pattern 是一个正则表达式,用于描述你想要匹配的模式。
  • string 是要搜索的目标字符串。

示例:

假设我们想要在一个字符串中找到数字的位置:

import re

text = "The price is $25.50."
match = re.search(r'\d+', text)

if match:
    print("Pattern found:", match.group())
    print("Start position:", match.start())
    print("End position:", match.end())
    print("Position span:", match.span())
else:
    print("Pattern not found.")

在这个例子中,re.search() 在给定的字符串中搜索数字 \d+ 的模式。如果找到匹配,它将返回一个匹配对象,否则返回 None

match 对象的方法和属性:

  • group(): 返回与整个匹配的字符串。
  • start(): 返回匹配的起始位置。
  • end(): 返回匹配的结束位置。
  • span(): 返回一个元组,包含匹配 (开始, 结束) 的位置。

注意事项:

  1. re.search() 会在整个字符串中查找第一个匹配项。如果需要查找所有匹配项,可以使用 re.findall()
  2. 如果找到匹配,re.search() 返回的是一个匹配对象,你可以使用它的方法来获取匹配结果,如 group()start() 等。
  3. 如果没有找到匹配,re.search() 将返回 None

re.search() 在需要在字符串中查找第一个匹配项时非常有用,尤其是当你不确定匹配项出现在字符串的什么位置时。

split

re.split() 是 Python re 模块中的一个函数,用于根据正则表达式模式分割字符串。它的作用类似于 str.split() 方法,但不是根据固定的字符分割字符串,而是根据给定的正则表达式模式进行分割。

这是 re.split() 函数的基本语法:

re.split(pattern, string)
  • pattern 是一个正则表达式,用于描述你想要作为分隔符的模式。
  • string 是要分割的目标字符串。

示例:

假设我们有一个句子,想要根据空格和标点符号分割它:

import re

text = "Hello, how are you?"
tokens = re.split(r'\W+', text)
print(tokens)

在这个例子中,re.split() 根据模式 \W+(非字母数字下划线的字符)对文本进行分割。它返回一个由分割后的子字符串组成的列表。

参数说明:

  • pattern 定义了分隔符的模式。可以是单个字符,也可以是更复杂的正则表达式。
  • string 是要分割的目标字符串。

注意事项:

  1. 如果模式中有括号,那么括号内的内容也会被包含在结果列表中。
  2. 如果模式中使用了捕获分组,那么分隔符也会包含在结果列表中。
  3. re.split() 不会在最后的空字符串位置进行分割,因此不会返回末尾的空字符串。

示例说明:

import re

text = "apple, orange, , banana, , mango"
tokens = re.split(r',\s*', text)
print(tokens)

这个例子中,模式 ,\\s* 匹配逗号后面的零个或多个空格。re.split() 根据这个模式分割字符串,并返回一个由分割后的子字符串组成的列表。结果列表中不包含末尾的空字符串。

re.split() 是一个很有用的函数,特别适用于需要根据复杂模式进行字符串分割的情况。

sub

re.sub() 是 Python 中 re 模块的一个函数,用于在字符串中查找与给定正则表达式模式匹配的内容,并将其替换为指定的字符串。它允许你执行在文本中查找并替换特定模式的操作。

这是 re.sub() 函数的基本语法:

re.sub(pattern, replacement, string)
  • pattern 是一个正则表达式,用于描述你想要匹配的模式。
  • replacement 是要替换匹配内容的字符串。
  • string 是要在其中进行替换操作的目标字符串。

示例:

假设我们想要在文本中替换所有数字为字符串 “NUMBER”:

import re

text = "I have 2 apples and 3 oranges."
new_text = re.sub(r'\d+', 'NUMBER', text)
print(new_text)

在这个例子中,re.sub() 将查找文本中的所有数字,并用字符串 “NUMBER” 替换它们。

参数说明:

  • pattern 定义了要查找和替换的模式。这可以是简单的字符,也可以是更复杂的正则表达式。
  • replacement 是要替换匹配内容的字符串。
  • string 是要在其中进行替换操作的目标字符串。

可选参数:

re.sub() 函数还包含两个可选参数:

  • count: 指定替换的最大次数。默认是 0,表示所有匹配都会被替换。
  • flags: 匹配模式。例如,re.IGNORECASE 可以用来进行不区分大小写的匹配。

示例说明:

import re

text = "The color of the sky is blue."
new_text = re.sub(r'blue', 'red', text)
print(new_text)

在这个例子中,re.sub() 将找到文本中的 “blue” 并用 “red” 进行替换。

re.sub() 函数是处理文本替换非常有用的工具。它可以用于简单的字符串替换,也可以使用更复杂的正则表达式模式进行高级替换操作。

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

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

相关文章

尚硅谷大数据项目《在线教育之实时数仓》笔记006

视频地址:尚硅谷大数据项目《在线教育之实时数仓》_哔哩哔哩_bilibili 目录 第9章 数仓开发之DWD层 P041 P042 P043 P044 P045 P046 P047 P048 P049 P050 P051 P052 第9章 数仓开发之DWD层 P041 9.3 流量域用户跳出事务事实表 P042 DwdTrafficUserJum…

初步利用Ansible实现批量服务器自动化管理

1.Ansible介绍 Ansible是一款开源的自动化运维工具, 在2012年由Michael DeHaan创建, 现在由Red Hat维护。Ansible是基于Python开发的,采用YAML语言编写自动化脚本playbook, 可以在Linux、Unix等系统上运行, 通过SSH协议管理节点, 无需在被管理节点安装agent。Ansible以其简单、…

【计算机网络 - 自顶向下方法】第一章习题答案

P2 Question:   式 (1-1) 给出了经传输速率为 R 的 N 段链路发送长度为 L 的一个分组的端到端时延。 对于经过 N 段链路一个接一个地发送 P 个这样的分组,一般化地表示出这个公式。 Answer:    N ∗ L R \frac{N*L}{R} RN∗L​时&#x…

Amazon MSK 基于 S3 的数据导出、导入、备份、还原、迁移方案

Amazon MSK(Amazon Managed Streaming for Apache Kafka)是 Amazon 云平台提供的托管 Kafka 服务。在系统升级或迁移时,用户常常需要将一个 Amazon MSK 集群中的数据导出(备份),然后在新集群或另一个集群中…

04、SpringBoot + 微信支付 --- 内网穿透ngrok(安装、使用)

Native 下单 1、内网穿透 ngrok 1-1:注册下载 下载 2-2:使用方式 直接在该目录cmd打开 第一次时候这个ngrok时,需要为计算机做授权 授权命令: ngrok config add-authtoken 2XmL8EfYQe6uVAjM9Iami0pWogd_5ztKmSxHs6UeAQn9RQB…

python 之异常处理结构

文章目录 常见的异常处理表现形式1. SyntaxError2. NameError3. TypeError4. IndexError5. KeyError6. ZeroDivisionError7. FileNotFoundErrortry……except …… 结构1. try 块2. except 块示例:多个except块try……except ……else 结构结构说明:示例…

AVS3:双向梯度修正BGC

双向梯度修正(Bi-directional Gradient Correction,BGC)是利用双向参考块间的差值对预测值进行修正的技术。 BGC仅用于双向预测CU,设两个方向得到的单向预测值分别为pred0和pred1,修正前的双向预测值为predBI&#xf…

Elasticsearch:搜索架构

Elasticsearch 全文检索的复杂性 为了理解为什么全文搜索是一个很难解决的问题,让我们想一个例子。 假设你正在托管一个博客发布网站,其中包含数亿甚至数十亿的博客文章,每个博客文章包含数百个单词,类似于 CSDN。 执行全文搜索…

win版redis详细安装教程

一、下载 github下载地址 https://github.com/MicrosoftArchive/redis/releases 可选择:下载msi包或zip压缩包 这里我选择的是zip压缩包,直接通过cmd命令窗口操作即可。 二、安装步骤 1、解压Redis压缩包 选中压缩包,右键选择解压&#…

【计算机网络】数据链路层-MAC和ARP协议

文章目录 1. 认识以太网2. MAC协议MAC帧的格式MAC地址和IP地址的区别MTU 3. 局域网通信原理碰撞检测和避免 4. ARP协议ARP数据报的格式ARP缓存 1. 认识以太网 网络层解决的是跨网络点到点传输的问题,数据链路层解决的是同一网络中的通信。 数据链路层负责在同一局域…

ARMday01(计算机理论、ARM理论)

计算机理论 计算机组成 输入设备、输出设备、运算器、控制器、存储器 1.输入设备:将编写好的软件代码以及相关的数据输送到计算机中,转换成计算机能够识别、处理和存储的数据形式 键盘、鼠标、手柄、扫描仪、 2.输出设备:将计算机处理好的数…

jacoco和sonar

目录 jacoco 引入依赖 构建配置修改 单元测试 生成报告 查看报告 报告说明 1. Instructions 2. Branches 3. Cyclomatic Complexity 4. Lines 5. Methods 6. Classes sonar7.7 基础环境 需要下载软件 解压文件并配置 运行启动 jacoco 引入依赖 <dep…

系列一、Spring + SpringMVC + MyBatis整合

一、概述 整合 Spring、SpringMVC、MyBatis。 二、整合步骤 2.1、pom <dependencies><!-- 普通maven项目中使用Sl4j注解 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1…

MFC 基础篇(一)

目录 一.SDK编程 二.为什么要学MFC&#xff1f; 三.MFC能做什么&#xff1f; 四.MFC开发环境搭建 五.MFC项目创建 六.消息映射机制 一.SDK编程 Application Programming Interface 应用程序编程接口。 Software Development Kit 软件开发工具包&#xff0c;一般会包括A…

自动驾驶高效预训练--降低落地成本的新思路(AD-PT)

自动驾驶高效预训练--降低落地成本的新思路 1. 之前的方法2. 主要工作——面向自动驾驶的点云预训练2.1. 数据准备 出发点&#xff1a;通过预训练的方式&#xff0c;可以利用大量无标注数据进一步提升3D检测 https://arxiv.org/pdf/2306.00612.pdf 1. 之前的方法 1.基于对比学…

图像标注工具lableImg安装出错怎么办?

我们要训练自己的图像识别模型&#xff0c;首先要进行图像的标注。labelimg就是一款可视化的图像标注工具。它是用Python编写的&#xff0c;通过Qt实现其图形界面&#xff0c;尽管它只支持矩形框标注&#xff0c;但因跨平台&#xff0c;支持Linux、Mac OS、Windows&#xff0c;…

Pycharm加载项目时异常,看不到自己的项目文件

最近看到一个朋友问&#xff0c;他把项目导入pycharm为什么项目里的包不在项目里显示&#xff0c;只在projects file里显示&#xff1f;问题截图如下&#xff1a; Project里看不到自己的项目文件 只能在Project Files里看到自己的项目文件 问题解答 我也是偶然发现的这个方案…

思维模型 首因效应

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。先入为主&#xff0c;一见钟情。 1 首因效应的应用 1.1 面试中的首因效应 小李是一名应届毕业生&#xff0c;他准备参加一家知名互联网公司的面试。在面试前&#xff0c;他做了充分的准备…

SQL注入漏洞及五大手法

SQL注入漏洞 文章目录 SQL注入漏洞万能用户名 SQL注入分类两大基本类型五大手法提交参数方式注入点的位置 注入点判断SQL注入的危害sql漏洞挖掘Mysql库中的注释 SQL注入基本手法联合查询条件 报错注入group byextractvalueupdataxml 布尔盲注延时注入 案例获取cms网站后台管理员…

云尘 命令执行系列

第一题 system <?php include "flag.php";if (isset($_POST[cmd])) {system($_POST[cmd]); }show_source(__FILE__);代码如上 system($_POST[cmd]); POST请求发送一个名为 cmd 的参数&#xff0c;然后将该参数的值传递给系统命令执行函数 system()&#xff0c…