当前位置: 首页 > news >正文

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 retext = "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 retext = "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 retext = "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 retext = "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 retext = "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 retext = "Hello, how are you?"
tokens = re.split(r'\W+', text)
print(tokens)

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

参数说明:

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

注意事项:

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

示例说明:

import retext = "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 retext = "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 retext = "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.lryc.cn/news/220708.html

相关文章:

  • vue项目npm install报错解决
  • ubuntu挂载共享目录的方法
  • 累计概率分布、概率分布函数(概率质量函数、概率密度函数)、度量空间、负采样(Negative Sampling)
  • 〔001〕虚幻 UE5 安装教程
  • Crypto(8) BUUCTF-bbbbbbrsa1
  • 软件测试之随机测试详解
  • 【广州华锐互动】3D全景虚拟旅游在文旅行业的应用场景
  • 多目标跟踪算法 实时检测 - opencv 深度学习 机器视觉 计算机竞赛
  • 深入了解Jedis:Java操作Redis的常见类型数据存储
  • angular+ionic+npm项目运行
  • 【数据库】数据库模式 Schema
  • RPC 原理详解
  • 新版Helix QAC 100%覆盖MISRA C++:2023
  • maven 项目添加 git-hook 脚本,约束提交内容格式
  • 18、Flink的SQL 支持的操作和语法
  • 泛微OA_lang2sql 任意文件上传漏洞复现
  • Rust编程基础核心之所有权(上)
  • 优化改进YOLOv5算法之添加DCNv3模块,有效提升目标检测效果
  • VSCode 连接不上 debian 的问题
  • 【ElasticSearch系列-06】Es集群架构的搭建以及集群的核心概念
  • 软考高级系统架构设计师系列案例考点专题六:面向服务架构设计
  • 【入门Flink】- 07Flink DataStream API【万字篇】
  • AI:55-基于深度学习的人流量检测
  • node版本管理工具nvm
  • stable-diffusion-webui安装Wav2Lip
  • Nacos-2.2.2源码修改集成高斯数据库GaussDB,postresql
  • Linux 内核中根据文件inode号获取其对应的struct inode
  • Pycharm-community-2021版安装和配置
  • 飞书开发学习笔记(一)-应用创建和测试
  • 【Mybatis小白从0到90%精讲】12:Mybatis删除 delete, 推荐使用主键删除!