python 之 正则表达式模块re

news2024/11/25 15:20:07

文章目录

  • 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() 函数是处理文本替换非常有用的工具。它可以用于简单的字符串替换,也可以使用更复杂的正则表达式模式进行高级替换操作。

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

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

相关文章

民宿酒店服务预约小程序的作用

民宿往往是旅游者们前往某个城市感受风情常住的地方,也因此在景区或特定地方,总是不乏大小民宿品牌,但除了市场高需求外,商家们所遇的痛点也不少: 1、获客引流难 民宿生意虽然需求量高,但各家品牌众多&am…

Unity meta的一些常见属性

Unity会项目文件夹中的每个文件分配一个同名后缀为.meta的文件。 我们可以将meta文件理解不同文件之间的桥梁,通过它引擎可以管理不同文件之间的依赖关系。 使用TXT文本文件打开之后,大致属性如下: 其中常用的属性有guid、 assetBundleName以…

大模型应用于数字人

大模型会改变整个软件行业, 其中具有代表性的产品之一是数字人, 那么,什么是数字人呢?数字人涉及了哪些关键技术呢?大模型对数字人的发展带来哪些影响呢? 1. 什么数字人? 数字人目前还缺乏一个相…

【图像分类】【深度学习】【Pytorch版本】AlexNet模型算法详解

【图像分类】【深度学习】【Pytorch版本】AlexNet模型算法详解 文章目录 【图像分类】【深度学习】【Pytorch版本】AlexNet模型算法详解前言AlexNet讲解卷积层的作用卷积过程特征图的大小计算公式Dropout的作用AlexNet模型结构 AlexNet Pytorch代码完整代码总结 前言 AlexNet是…

2.数制与编码

目录 一. 进位计数制 (1)二进制,八进制,十进制,十六进制 (2)二进制,八进制,十六进制的转换 (3)十进制转换成任意进制 (4&#xf…

linux命令screen解决client_loop: send disconnect: Broken pipe

一、SSH连接服务器,client_loop: send disconnect: Broken pipe 最近需要在服务器上运行一个需要跑很久的脚本,但ssh连接的远程服务器的命令窗口经常会报:client_loop: send disconnect: Broken pipe,这个错误是ssh 命令之后没有活…

电路布线问题动态规划详解(做题思路)

对于电路布线问题,想必学过动态规划的大家都很清除。今天就来讲解一下这个动态规划经典题目。 目录 问题描述输入分析最优子结构代码 问题描述 在一块电路板的上、下2端分别有n个接线柱。根据电路设计,要求用导 线(i,π(i))将上端接线柱与下端接线柱相…

家用电脑做服务器,本地服务器搭建,公网IP申请,路由器改桥接模式,拨号上网

先浇一盆冷水! 我不知道其他运营商是什么情况。联通的运营商公网IP端口 80、8080、443 都会被屏蔽掉,想要开放必须企业备案(个人不行)才可以。也就是说,只能通过其他端口进行showtime了。 需要哪些东西? 申…

【鸿蒙软件开发】ArkUI容器组件之Grid(网格布局)

文章目录 前言一、Grid1.1 子组件GridItem是什么子组件接口属性事件示例代码 1.2 接口参数 1.3 属性1.4 Grid的几种布局模式1.5 GridDirection枚举说明1.6事件ItemDragInfo对象说明 1.7 示例代码 总结 前言 Grid容器组件:网格容器,由“行”和“列”分割…

php对字符串中的特殊符号进行过滤的方法

1、使用htmlspecialchars函数&#xff1a;此函数将特殊字符转换为对应的HTML实体。示例代码如下&#xff1a; $str "<script>alert(XSS)</script>"; $filtered_str htmlspecialchars($str); echo $filtered_str; 输出&#xff1a; <script>ale…

四阶龙格库塔与元胞自动机

龙格库塔法参考&#xff1a; 【精选】四阶龙格库塔算法及matlab代码_四阶龙格库塔法matlab_漫道长歌行的博客-CSDN博客 龙格库塔算法 Runge Kutta Method及其Matlab代码_龙格库塔法matlab_Lzh_023016的博客-CSDN博客 元胞自动机参考&#xff1a; 元胞自动机&#xff1a;森林…

线性表(顺序表,单链表,双链表,循环链表,静态链表)

目录 1.线性表的定义1.几个重要的概念2.逻辑结构 2.线性表的基本操作3.顺序表&#xff08;线性表的顺序存储&#xff09;1.静态分配2.动态分配3.顺序表的特点4.顺序表的基本操作1.插入2.删除3.查找1.按位查找2.按值查找 4.链表&#xff08;线性表的链式存储&#xff09;1.单链表…

HackTheBox-Starting Point--Tier 1---Funnel

文章目录 一 题目二 实验过程三 利用SSH隧道3.1 本地端口转发 一 题目 Tags FTP、PostgreSQL、Reconnaissance、Tunneling、Password Spraying、Port Forwarding、Anonymous/Guest Access、Clear Text Credentials译文&#xff1a;FTP、PostgreSQL、侦察、隧道技术、密码喷洒…

【笔记】判断高电平,低电平和方波的几种方法

读取某一个上拉电平信号&#xff0c;它可能输出是低电平&#xff0c;可能是高电平&#xff0c;可能是方波&#xff0c;并且这个方波不知道频率何占空比&#xff0c;那么如何来通过程序来判断呢&#xff1f;高电平和低电平都好说&#xff0c;利用HAL库读取即可&#xff0c;如下&…

在云上jupylab(codelab)常用的shell命令

1、切换当前文件目录位置&#xff1a; %cd /project/train/ 2、删除目标文件夹和文件夹下面的内容&#xff0c;注意这个r是不能少的&#xff1a; !rm -r /project/train/src_repo/dataset 3、创建数据集相关文件夹 !mkdir /project/train/src_repo/dataset 4、复制指定…

Pytorch tensor 数据类型快速转换三种方法

目录 1 通用,简单&#xff0c;CPU/GPU tensor 数据类型转换 2 tensor.type()方法 CPU tensor 数据类型转换 GPU tensor 数据类型转换 3 tensor.to() 方法,CPU/GPU tensor 数据类型转换 1 通用,简单&#xff0c; CPU/GPU tensor 数据类型转换 tensor.double()&#xff1a;…

Educational Codeforces Round 157 (A--D)视频详解

Educational Codeforces Round 157 &#xff08;A--D&#xff09;视频详解 视频链接A题代码B题代码C题代码D题代码 视频链接 Educational Codeforces Round 157 &#xff08;A–D&#xff09;视频详解 A题代码 #include<bits/stdc.h> #define endl \n #define deb(x)…

高频SQL50题(基础版)-2

文章目录 主要内容一.SQL练习题1.577-员工奖金代码如下&#xff08;示例&#xff09;: 2.1280-学生们参加各科测试的次数代码如下&#xff08;示例&#xff09;: 3.570-至少有5名直接下属的经理代码如下&#xff08;示例&#xff09;: 4.1934-确认率代码如下&#xff08;示例&a…

C#,数值计算——偏微分方程,Relaxation的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public class Relaxation { private Relaxation() { } public static void sor(double[,] a, double[,] b, double[,] c, double[,] d, double[,] e, double[,] f, double[,] u, double rjac) …

大型Bat面试知识总结分享—AMS在Android起到什么作用?简单的分析下Android的源码

面试官: AMS在Android起到什么作用&#xff0c;简单的分析下Android的源码 心理分析&#xff1a;这道题在发生在大多数场景下。面对这道题 很多求职很茫然&#xff0c;不知道该如何说起。AMS本身比较复杂难以理解。工作多年也很难弄清AMS的作用&#xff0c;其实我们大可从以下几…