Python 进阶(三):正则表达式(re 模块)

news2024/9/28 11:15:52

在这里插入图片描述

❤️ 博客主页:水滴技术
🌸 订阅专栏:Python 入门核心技术
🚀 支持水滴:点赞👍 + 收藏⭐ + 留言💬

文章目录

  • 1. 导入re模块
  • 2. re模块中的常用函数
    • 2.1 re.search()
    • 2.2 re.findall()
    • 2.3 re.sub()
    • 2.4 re.compile()
    • 2.5 re.split()
  • 3. 正则表达式的语法
  • 4. 匹配对象的属性和方法
    • 4.1 group()
    • 4.2 start()
    • 4.3 end()
    • 4.4 span()
  • 5. 常用示例
    • 5.1 匹配数字
    • 5.2 匹配邮箱
    • 5.3 匹配URL
    • 5.4 匹配日期
    • 5.5 匹配IP地址
    • 5.6 匹配HTML标签
    • 5.7 匹配手机号码
    • 5.8 匹配身份证号码
    • 5.9 匹配QQ号码
    • 5.10 匹配微信号
    • 5.11 匹配邮政编码
    • 5.12 匹配中文字符
    • 5.13 匹配空白字符
    • 5.14 匹配非空白字符
    • 5.15 匹配多行文本
    • 5.16 匹配特定字符集
    • 5.17 匹配特定字符集的补集
    • 5.18 匹配重复字符
  • 6. 总结
  • 系列文章
  • 热门专栏


大家好,我是水滴~~

Python标准库中的re模块是用于处理正则表达式的模块。正则表达式是一种用于匹配字符串的强大工具,可以方便地从文本中提取和处理数据。在本教程中,我们将介绍re模块的基本用法和示例。

1. 导入re模块

在使用re模块之前,需要先导入它。可以使用以下代码导入re模块:

import re

2. re模块中的常用函数

Python的re模块提供了众多用于处理正则表达式的函数。下面是一些常用的函数:

2.1 re.search()

re.search()函数用于在字符串中搜索正则表达式的第一个匹配项。如果匹配成功,返回匹配对象;否则返回None

import re

string = "The quick brown fox jumps over the lazy dog."
match = re.search("fox", string)

if match:
    print("Found:", match.group())
else:
    print("Not found")

输出:

Found: fox

2.2 re.findall()

re.findall()函数用于在字符串中查找所有匹配的子串,并以列表形式返回。如果没有找到匹配,返回空列表。

import re

string = "The quick brown fox jumps over the lazy dog."
matches = re.findall("o", string)

if matches:
    print("Found:", matches)
else:
    print("Not found")

输出:

Found: ['o', 'o', 'o', 'o']

2.3 re.sub()

re.sub()函数用于在字符串中用指定的字符串替换所有匹配的子串,并返回新的字符串。可以使用正则表达式来指定要替换的模式。

import re

string = "The quick brown fox jumps over the lazy dog."
new_string = re.sub("fox", "cat", string)

print("Old string:", string)
print("New string:", new_string)

输出:

Old string: The quick brown fox jumps over the lazy dog.
New string: The quick brown cat jumps over the lazy dog.

2.4 re.compile()

re.compile()函数用于将正则表达式编译成一个正则表达式对象,以便在后续的匹配中重复使用。

import re

pattern = re.compile("fox")
string = "The quick brown fox jumps over the lazy dog."
match = pattern.search(string)

if match:
    print("Found:", match.group())
else:
    print("Not found")

输出:

Found: fox

2.5 re.split()

re.split()函数用于根据正则表达式来分割字符串,并返回分割后的列表。

import re

string = "The quick brown fox jumps over the lazy dog."
words = re.split("\W+", string)

print(words)

输出:

['The', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog', '']

3. 正则表达式的语法

在使用Python的re模块时,需要使用正则表达式来指定要匹配的模式。正则表达式由一系列字符和特殊字符组成。下面是一些常用的特殊字符:

字符描述
.匹配除了换行符外的任意单个字符
*匹配前面的字符0次或多次
+匹配前面的字符1次或多次
?匹配前面的字符0次或1次
{n}匹配前面的字符n次
{n,}匹配前面的字符至少n次
{n,m}匹配前面的字符至少n次,但不超过m次
[]匹配方括号中的任意单个字符
[^]匹配不在方括号中的任意单个字符
()分组,可以在匹配中引用

下面是一些示例:

正则表达式描述
abc匹配字符串"abc"
.匹配任意单个字符
a*匹配零个或多个字符"a"
a+匹配一个或多个字符"a"
a?匹配零个或一个字符"a"
a{3}匹配三个字符"a"
a{3,}匹配至少三个字符"a"
a{3,6}匹配三到六个字符"a"
[abc]匹配单个字符"a"、“b"或"c”
[^abc]匹配除了字符"a"、"b"和"c"以外的任意单个字符
(ab)+匹配一个或多个"ab"字符串

4. 匹配对象的属性和方法

当使用re模块的函数对字符串进行匹配时,将返回一个匹配对象。匹配对象具有以下常用属性和方法:

4.1 group()

group()方法返回匹配的子串。

import re

string = "The quick brown fox jumps over the lazy dog."
match = re.search("fox", string)

if match:
    print("Found:", match.group())
else:
    print("Not found")

输出:

Found: fox

4.2 start()

start()方法返回匹配的子串在原始字符串中的开始位置的索引。

import re

string = "The quick brown fox jumps over the lazy dog."
match = re.search("fox", string)

if match:
    print("Start index:", match.start())
else:
    print("Not found")

输出:

Start index: 16

4.3 end()

end()方法返回匹配的子串在原始字符串中的结束位置的索引。

import re

string = "The quick brown fox jumps over the lazy dog."
match = re.search("fox", string)

if match:
    print("End index:", match.end())
else:
    print("Not found")

输出:

End index: 19

4.4 span()

span()方法返回匹配的子串在原始字符串中的开始和结束位置的索引。

import re

string = "The quick brown fox jumps over the lazy dog."
match = re.search("fox", string)

if match:
    print("Span:", match.span())
else:
    print("Not found")

输出:

Span: (16, 19)

5. 常用示例

正则表达式是一种强大的文本匹配工具,可以用于处理字符串中的数据和信息。在Python中,可以使用re模块来处理正则表达式。下面是一些常见的正则表达式示例,用于展示如何使用Python中的正则表达式。

5.1 匹配数字

匹配数字非常常见,可以使用\d元字符来匹配任意数字。例如,下面的正则表达式将匹配任意数字:

import re

string = "There are 123 apples in the basket."
matches = re.findall("\d+", string)

print(matches)

输出:

['123']

5.2 匹配邮箱

匹配邮箱也是一种常见的需求,可以使用正则表达式来实现。下面的正则表达式将匹配有效的邮箱地址:

import re

email = "example@domain.com"
pattern = r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"
matches = re.findall(pattern, email)

print(matches)

输出:

['example@domain.com']

5.3 匹配URL

匹配URL也是一种常见的需求,可以使用正则表达式来实现。下面的正则表达式将匹配有效的URL地址:

import re

url = "https://www.google.com/search?q=python"
pattern = r"https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+"
matches = re.findall(pattern, url)

print(matches)

输出:

['https://www.google.com']

5.4 匹配日期

匹配日期也是一种常见的需求,可以使用正则表达式来实现。下面的正则表达式将匹配格式为YYYY-MM-DD的日期:

import re

date = "Today is 2023-07-29."
pattern = r"\d{4}-\d{2}-\d{2}"
matches = re.findall(pattern, date)

print(matches)

输出:

['2023-07-29']

5.5 匹配IP地址

匹配IP地址也是一种常见的需求,可以使用正则表达式来实现。下面的正则表达式将匹配有效的IP地址:

import re

ip = "192.168.1.1"
pattern = r"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b"
matches = re.findall(pattern, ip)

print(matches)

输出:

['192.168.1.1']

5.6 匹配HTML标签

匹配HTML标签也是一种常见的需求,可以使用正则表达式来实现。下面的正则表达式将匹配HTML标签:

import re

html = "<p>This is a paragraph.</p>"
pattern = r"<.*?>"
matches = re.findall(pattern, html)

print(matches)

输出:

['<p>', '</p>']

5.7 匹配手机号码

匹配手机号码也是一种常见的需求,可以使用正则表达式来实现。下面的正则表达式将匹配有效的手机号码:

import re

phone = "13812345678"
pattern = r"1[3-9]\d{9}"
matches = re.findall(pattern, phone)

print(matches)

输出:

['13812345678']

5.8 匹配身份证号码

import re
idcard = "310101198001010001"
pattern = r"\d{6}(?:19|20)\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[1-2]\d|3[0-1])\d{3}[0-9Xx]"
matches = re.findall(pattern, idcard)
print(matches)

输出:

['310101198001010001']

5.9 匹配QQ号码

import re
qq = "123456"
pattern = r"^[1-9]\d{4,10}$"
matches = re.findall(pattern, qq)
print(matches)

输出:

['123456']

5.10 匹配微信号

import re
wechat = "wx123456"
pattern = r"^[a-zA-Z][-_a-zA-Z0-9]{5,19}$"
matches = re.findall(pattern, wechat)
print(matches)

输出:

['wx123456']

5.11 匹配邮政编码

import re
zipcode = "12345-6789"
pattern = r"\d{5}(?:-\d{4})?"
matches = re.findall(pattern, zipcode)
print(matches)

输出:

['12345-6789']

5.12 匹配中文字符

import re
text = "这是一段中文文本。"
pattern = r"[\u4e00-\u9fa5]+"
matches = re.findall(pattern, text)
print(matches)

输出:

['这是一段中文文本']

5.13 匹配空白字符

import re
text = "This is a sentence with spaces."
matches = re.findall("\s+", text)
print(matches)

输出:

[' ', ' ', ' ', ' ', ' ']

5.14 匹配非空白字符

import re
text = "This is a sentence with spaces."
matches = re.findall("\S+", text)
print(matches)

输出:

['This', 'is', 'a', 'sentence', 'with', 'spaces.']

5.15 匹配多行文本

import re
text = "Line 1\nLine 2\nLine 3"
matches = re.findall(r"^.*$", text, re.MULTILINE)
print(matches)

输出:

['Line 1', 'Line 2', 'Line 3']

5.16 匹配特定字符集

import re
text = "The quick brown fox jumps over the lazy dog."
matches = re.findall("[aeiou]", text)
print(matches)

输出:

['u', 'i', 'o', 'o', 'u', 'o', 'e', 'a', 'o']

5.17 匹配特定字符集的补集

import re
text = "The quick brown fox jumps over the lazy dog."
matches = re.findall("[^aeiou]", text)
print(matches)

输出:

['T', 'h', ' ', 'q', 'c', 'k', ' ', 'b', 'r', 'w', 'n', ' ', 'f', 'x', ' ', 'j', 'm', 'p', 's', ' ', 'v', 'r', ' ', 't', 'h', ' ', 'l', 'z', 'y', ' ', 'd', 'g', '.']

5.18 匹配重复字符

import re
text = "The quick brown fox jumps over the lazy dog."
matches = re.findall("o+", text)
print(matches)

输出:

['o', 'oo', 'o', 'o', 'o']

这些示例展示了如何使用Python中的正则表达式进行文本匹配。正则表达式是一种非常强大的文本处理工具,可以用于处理各种文本数据和信息。在处理和清洗大量文本数据时,正则表达式可以提高工作效率和准确性。

6. 总结

re模块是Python标准库中用于处理正则表达式的模块。它提供了一系列函数和方法,用于在字符串中搜索、替换和分割子串。要使用re模块,需要熟悉正则表达式的语法和常用特殊字符。在匹配成功后,将返回一个匹配对象,可以使用其属性和方法来获取匹配的子串和位置等信息。


系列文章

🔥 Python 进阶(一):PyCharm 下载、安装和使用
🔥 Python 进阶(二):操作字符串的常用方法

热门专栏

👍 《Python入门核心技术》
👍 《IDEA 教程:从入门到精通》
👍 《Java 教程:从入门到精通》
👍 《MySQL 教程:从入门到精通》
👍 《大数据核心技术从入门到精通》

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

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

相关文章

020 - STM32学习笔记 - Fatfs文件系统(二) - 移植与测试

020 - STM32学习笔记 - Fatfs文件系统&#xff08;二&#xff09; - 移植与测试 上节学习了FatFs文件系统的相关知识&#xff0c;这节内容继续学习在STM32上如何移植FatFs文件系统&#xff0c;并且实现文件的创建、读、写与删除等功能。 一、FatFs文件系统移植 移植还是在之…

uniapp 全局数据(globalData)的设置,获取,更改

globalData&#xff0c;这是一种简单的全局变量机制。这套机制在uni-app里也可以使用&#xff0c;并且全端通用 因为uniapp基本上都是将页面&#xff0c;或者页面中相同的部分&#xff0c;进行组件化&#xff0c;所以会存在父&#xff0c;子&#xff0c;&#xff08;子&#xf…

AI革命:揭开微软无与伦比的AI技术面纱

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 2023年7月25日&#xff0c;全球科技行业的领导者之一微软(MSFT)公布了其2023财年第四季度的财报。 除了举世闻名的Windows操作系统&#xff0c;微软还通过笔记本电脑、个人电脑和服务器等产品改变了世界&#xff0c;该公司…

ARM裸机-2

1、搞清楚各种版本号 1.1、ARM的型号命名问题 ARM7和ARMv7不是一回事。 Cortex-A9比Cortex-A7更先出来。 型号很乱&#xff0c;初学者容易分不清哪个是哪个&#xff0c;比较迷茫。 1.2、ARM的几种版本号 ARM内核版本号&#xff08;ARM卖给别人的核心版本号&#xff09; …

IntelliJ IDEA 2023.2 主要更新了什么?(图文版)

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

无敌的服务注册中心Spring CloudAlibaba Nacos不进来看一看吗?

1、Nacos概述 Nacos支持发现、配置和管理几乎所有类型的服务。其Key features&#xff1a;Service Discovery And Service Health Check、Dynamic configuration management、Dynamic DNS service、Service governance and metadata management 官网 2、Nacos安装运行 安装 …

LearnOpenGL_Day1

文章目录 前期准备下载GLFW下载GLAD 引入库文件生成窗口重要概念——双缓冲 &#xff08;double buffer&#xff09;代码实现 学习总结 前期准备 下载GLFW GLFW DOWNLOAD 解压后使用CMake编译至新创建的bulid文件夹下&#xff1a; 下载GLAD 引入库文件 创建好工程&#x…

git的ssh方式对接码云

一、环境准备&#xff1a; 1、git下载&#xff0c;360管家或是百度。 2、vs2022&#xff0c;百度下载。 二、配置git&#xff1a; 1、打开准备存放文件的文件夹&#xff0c;右键&#xff0c;选择“Git Bash here”&#xff0c;弹出命令窗口&#xff0c; 输入&#xff1a;ss…

平板光波导中传播常数β的matlab计算(验证了是对的)

参照的是导波光学_王建(清华大学)的公式(3-1-2、3-1-3)&#xff0c;算的参数是这本书的图3-3的。 function []PropagationConstantsMain() clear;clc;close all lambda01.55;%真空或空气中的入射波长&#xff0c;单位um k02*pi/lambda0; m3;%导模阶数(需要人为指定) n11.62;%芯…

入门redis你一定需要知道的命令

1、各种数据类型的特点 字符串(string)&#xff1a;普通字符串&#xff0c;Redis中最简单的数据类型 哈希(hash)&#xff1a;也叫散列&#xff0c;类似于Java中的HashMap结构 列表(list)&#xff1a;按照插入顺序排序&#xff0c;可以有重复元素&#xff0c;类似于Java中的Li…

回归预测 | MATLAB实现WOA-ELM鲸鱼算法优化极限学习机多输入单输出回归预测

回归预测 | MATLAB实现WOA-ELM鲸鱼算法优化极限学习机多输入单输出回归预测 目录 回归预测 | MATLAB实现WOA-ELM鲸鱼算法优化极限学习机多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现WOA-ELM鲸鱼算法优化极限学习机多输入回归预测&#…

流数据湖平台Apache Paimon(二)集成 Flink 引擎

文章目录 第2章 集成 Flink 引擎2.1 环境准备2.1.1 安装 Flink2.1.2 上传 jar 包2.1.3 启动 Hadoop2.1.4 启动 sql-client 2.2 Catalog2.2.1 文件系统2.2.2 Hive Catalog2.2.3 sql 初始化文件 2.3 DDL2.3.1 建表2.3.2 修改表 2.4 DML2.4.1 插入数据2.4.2 覆盖数据2.4.3 更新数据…

idea插件开发-自定义语言4-Syntax Highlighter

SyntaxHighlighter用于指定应如何突出显示特定范围的文本&#xff0c;ColorSettingPage可以定义颜色。 一、Syntax Highter 1、文本属性键&#xfeff; TextAttributesKey用于指定应如何突出显示特定范围的文本。不同类型的数据比如关键字、数字、字符串等如果要突出显示都需…

ReID网络(一):MGN网络

Start MGN 1. 序言 现代基于感知的信息中&#xff0c;视觉信息占了80~85%。基于视觉信息的处理和分析被应用到诸如安防、电力、汽车等领域。 以安防市场为例&#xff0c;早在2017年&#xff0c;行业咨询公司IHS Market&#xff0c;我国在公共和私人领域安装有摄像头约1.76亿…

《TCP IP网络编程》第十三章

第 13 章 多种 I/O 函数 13.1 send & recv 函数 Linux 中的 send & recv&#xff1a; send 函数定义&#xff1a; #include <sys/socket.h> ssize_t send(int sockfd, const void *buf, size_t nbytes, int flags); /* 成功时返回发送的字节数&#xff0c;失败…

36.悬浮板

悬浮板 html部分 <div class"container"><div class"square"></div> </div>css部分 *{margin: 0;padding: 0; } body{background-color: #111;height: 100vh;overflow: hidden;display: flex;justify-content: center;align-it…

layui框架学习(33:流加载模块)

Layui中的流加载模块flow主要支持信息流加载和图片懒加载两部分内容&#xff0c;前者是指动态加载后续内容&#xff0c;示例的话可以参考csdn个人博客主页&#xff0c;鼠标移动到页面底部时自动加载更多内容&#xff0c;而后者是指页面显示图片时才会延迟加载图片信息。   fl…

苍穹外卖-day08

苍穹外卖-day08 本项目学自黑马程序员的《苍穹外卖》项目&#xff0c;是瑞吉外卖的Plus版本 功能更多&#xff0c;更加丰富。 结合资料&#xff0c;和自己对学习过程中的一些看法和问题解决情况上传课件笔记 视频&#xff1a;https://www.bilibili.com/video/BV1TP411v7v6/?sp…

第17节 R语言分析:生物统计数据集 R 编码分析和绘图

生物统计数据集 R 编码分析和绘图 生物统计学,用于对给定文件 data.csv 中的医疗数据应用 R 编码,该文件是患者人口统计数据集,包含有关来自各种祖先谱系的个体的标准信息。 数据集特征解释 脚本 output= file("Output.txt") # File name of output log sink(o…

[数据集][目标检测]城市道路井盖破损丢失目标检测1377张

数据集制作单位&#xff1a;未来自主研究中心(FIRC) 数据集格式&#xff1a;Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件&#xff0c;仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数)&#xff1a;1377 标注数量(xml文件个数)&#xff1a;1377 标注类别数&a…