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

Python笔记 - 正则表达式

正则表达式(Regular Expression,简称regex)是一种强大的工具,用于匹配字符串模式。在Python中,正则表达式通过re模块提供。本文将带你深入了解Python中的正则表达式,从基础概念到高级用法。

1. 什么是正则表达式?

正则表达式是一种用来描述字符串模式的方法。它可以用来匹配、查找和替换文本中的特定模式。通过使用正则表达式,你可以定义一些规则,然后搜索文本中符合这些规则的内容。这种功能在文本处理、数据抽取和字符串匹配等领域非常有用。

2. 基本概念

在介绍具体用法之前,先了解一些基本概念:

  • 模式(Pattern):正则表达式的核心,由字符和特殊符号组成,用于描述字符串的规则。
  • 匹配(Match):字符串是否符合模式。
  • 组(Group):通过括号()来定义子模式,方便提取子字符串。

3. 常用符号

以下是一些常用的正则表达式符号:

  • .:匹配除换行符以外的任意字符。
  • ^:匹配字符串的开头。
  • $:匹配字符串的结尾。
  • *:匹配前一个字符零次或多次。
  • +:匹配前一个字符一次或多次。
  • ?:匹配前一个字符零次或一次。
  • {n}:匹配前一个字符n次。
  • {n,m}:匹配前一个字符n到m次。
  • []:匹配方括号内的任意字符。
  • |:匹配左右任意一个表达式。
  • \d:匹配任何数字,相当于[0-9]
  • \D:匹配任何非数字字符。
  • \w:匹配任何字母、数字、下划线字符。
  • \W:匹配任何非字母、数字、下划线字符。
  • \s:匹配任何空白字符(包括空格、制表符等)。
  • \S:匹配任何非空白字符。

4. Python中的正则表达式

在Python中,可以使用re模块进行正则表达式操作。以下是一些常用方法:

导入re模块

import re

re.match()

re.match从字符串的起始位置匹配正则表达式。

import repattern = r'hello'
text = 'hello world'
match = re.match(pattern, text)if match:print("Match found:", match.group())
else:print("No match")

re.search()

re.search扫描整个字符串并返回第一个成功的匹配。

import repattern = r'world'
text = 'hello world'
match = re.search(pattern, text)if match:print("Match found:", match.group())
else:print("No match")

re.findall()

re.findall返回字符串中所有非重叠的匹配。

import repattern = r'\d+'
text = 'There are 123 apples and 456 oranges.'
matches = re.findall(pattern, text)print("Matches found:", matches)

re.sub()

re.sub用于替换字符串中的匹配项。

import repattern = r'apples'
replacement = 'bananas'
text = 'I like apples'
new_text = re.sub(pattern, replacement, text)print("Replaced text:", new_text)

re.split()

re.split用于根据匹配项拆分字符串。

import repattern = r'\s+'
text = 'Split this sentence into words.'
words = re.split(pattern, text)print("Words:", words)

使用分组

分组是正则表达式的强大功能之一,可以提取子字符串。

import repattern = r'(\d+)-(\d+)-(\d+)'
text = 'My phone number is 123-456-7890'
match = re.search(pattern, text)if match:print("Full match:", match.group(0))print("Area code:", match.group(1))print("Prefix:", match.group(2))print("Line number:", match.group(3))

5. 高级用法

非贪婪匹配

默认情况下,正则表达式是贪婪的,会匹配尽可能多的字符。使用?可以进行非贪婪匹配。

import retext = 'He said: "Hello, world!"'
pattern_greedy = r'".*"'
pattern_nongreedy = r'".*?"'match_greedy = re.search(pattern_greedy, text)
match_nongreedy = re.search(pattern_nongreedy, text)print("Greedy match:", match_greedy.group())
print("Non-greedy match:", match_nongreedy.group())

命名组

使用命名组可以更方便地提取子字符串。

import repattern = r'(?P<area>\d+)-(?P<prefix>\d+)-(?P<line>\d+)'
text = 'My phone number is 123-456-7890'
match = re.search(pattern, text)if match:print("Area code:", match.group('area'))print("Prefix:", match.group('prefix'))print("Line number:", match.group('line'))

6. 实战案例

验证邮箱地址

import redef is_valid_email(email):pattern = r'^[\w\.-]+@[\w\.-]+\.\w+$'return re.match(pattern, email) is not Noneemail = 'test@example.com'
print("Is valid email:", is_valid_email(email))

提取URL中的域名

import redef extract_domain(url):pattern = r'https?://(www\.)?(\w+\.\w+)'match = re.search(pattern, url)if match:return match.group(2)return Noneurl = 'https://www.example.com/path/to/page'
print("Domain:", extract_domain(url))

7. 结论

正则表达式是一种非常强大的工具,可以极大地简化字符串处理任务。在Python中,re模块提供了丰富的正则表达式功能。通过本文的介绍,相信你已经掌握了基本的正则表达式语法和一些常用的操作。希望这些内容能够帮助你在日常编程中更加高效地处理字符串。

相关文章:

Python笔记 - 正则表达式

正则表达式&#xff08;Regular Expression&#xff0c;简称regex&#xff09;是一种强大的工具&#xff0c;用于匹配字符串模式。在Python中&#xff0c;正则表达式通过re模块提供。本文将带你深入了解Python中的正则表达式&#xff0c;从基础概念到高级用法。 1. 什么是正则…...

安卓网络通信(多线程、HTTP访问、图片加载、即时通信)

本章介绍App开发常用的以下网络通信技术&#xff0c;主要包括&#xff1a;如何以官方推荐的方式使用多线程技术&#xff0c;如何通过okhttp实现常见的HTTP接口访问操作&#xff0c;如何使用Dlide框架加载网络图片&#xff0c;如何分别运用SocketIO和WebSocket实现及时通信功能等…...

Virtual Memory Primitives for User Program翻译

Virtual Memory Primitives for User Program 安德鲁阿普尔&#xff08;Andrew Appel&#xff09;和李凯&#xff08;Kai Li&#xff09; 普林斯顿大学计算机科学系 摘要 传统上&#xff0c;内存管理单元&#xff08;MMUS&#xff09;被操作系统用于实现磁盘分页的虚拟内存…...

网络基础2

目录 应用层HTTP协议认识URLurlencode和urldecode HTTP协议格式http请求格式http响应格式 HTTP的方法GET与POST的区别 HTTP的状态码HTTP常见HeaderCookie与Session 传输层在谈端口号端口号范围划分认识知名端口号netstatpidof UDP协议UDP协议端格式UDP的特点面向数据报UDP的缓冲…...

C# 下载文件2

从服务下载压缩包 过程 发起请求 HttpWebRequest 断点续传 HttpWebRequest.AddRange() 获取服务资源的响应 HttpWebResponse 设置下载进度条 解压压缩包 ZipFile using System; using System.IO; using System.IO.Compression; using System.Net;namespace Test01 {clas…...

Unity | Tilemap系统

目录 一、准备工作 1.插件导入 2.资源导入 二、相关组件介绍 1.Grid组件 2.Tilemap组件 3.Tile 4.Tile Palette 5.Brushes 三、动态创建地图 四、其他功能 1.移动网格上物体 2.拖拽缩放地图 Unity Tilemap系统为2D游戏开发提供了一个直观且功能强大的平台&#xff…...

CSS选择符和可继承属性

属性选择符&#xff1a; 示例&#xff1a;a[target"_blank"] { text-decoration: none; }&#xff08;选择所有target"_blank"的<a>元素&#xff09; /* 选择所有具有class属性的h1元素 */ h1[class] { color: silver; } /* 选择所有具有hre…...

C++升级软件时删除老版本软件的桌面快捷方式(附源码)

删除桌面快捷方式其实是删除桌面上的快捷方式文件,那我们如何去删除桌面快捷方式文件呢?软件可能已经发布过多个版本,其中的一些版本的快捷方式文件名称可能做了多次改动,程序中不可能记录每个版本的快捷方式名称,没法直接去删除快捷方式文件。本文就给出一种有效的处理办…...

github国内加速访问有效方法

这里只介绍实测最有效的一种方法&#xff0c;修改主机的Hosts文件&#xff0c;如果访问github网站慢或者根本无法访问的时候可以采用下面方法进行解决。 1、搜索一个IP查询网站 首先百度搜索选择一个IP查询的网站&#xff0c;这里我用下面这个网站&#xff08;如果该网站失效…...

如何处理JavaScript中的浮点数精度问题

在开发过程中&#xff0c;特别是涉及到金额计算或需要精确比较的场景&#xff0c;浮点数精度问题是一个常见而重要的挑战。本文将介绍在JavaScript中如何识别、理解和解决这些问题&#xff0c;并提供一些实用的技巧和建议。 1. 问题背景 JavaScript中的浮点数采用IEEE 754标准…...

ASPICE标准与ASPICE认证:提升汽车软件开发质量与效率的关键途径

在当今日新月异的科技时代&#xff0c;软件产品的质量和可靠性成为了企业赢得市场的关键。而ASPICE&#xff08;Automotive SPICE&#xff09;标准&#xff0c;作为汽车行业中软件过程评估的国际通用标准&#xff0c;正逐渐引起行业的广泛关注。那么&#xff0c;ASPICE标准究竟…...

easyexcel的简单使用(execl模板导出)

模板支持功能点 支持列表支持自定义头名称支持自定义fileName支持汇总 模板示例 操作 pom引入 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>${easyexcel.version}</version></dep…...

代码随想录算法训练营第39天|● 62.不同路径 ●63. 不同路径 II

不同路径 62. 不同路径 - 力扣&#xff08;LeetCode&#xff09; 1.确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j] &#xff1a;表示从&#xff08;0 &#xff0c;0&#xff09;出发&#xff0c;到(i, j) 有dp[i][j]条不同的路径。 2.确定递推公式 …...

【DevOps】 什么是容器 - 一种全新的软件部署方式

目录 引言 一、什么是容器 二、容器的工作原理 三、容器的主要特性 四、容器技术带来的变革 五、容器技术的主要应用场景 六、容器技术的主要挑战 七、容器技术的发展趋势 引言 在过去的几十年里,软件行业经历了飞速的发展。从最初的大型机时代,到后来的个人电脑时代,…...

使用pnpm创建vue3项目

https://pnpm.io/zh/ 全局安装&#xff1a; npm install -g pnpm 检查版本&#xff1a; pnpm -v 创建vue3项目&#xff1a; pnpm create vuelatest 项目装包&#xff1a; pnpm install 运行项目&#xff1a; pnpm dev 命令行&#xff1a; https://pnpm.io/zh/pnpm-cli pnpm …...

【软件测试】43个功能测试点总结

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 功能测试就是对产品的各功能进行验证&#xff0c;根据功能测试用例&#xff0c;逐项测试&#xf…...

Python — — GPU编程

Python — — GPU编程 要想将Python程序运行在GPU上&#xff0c;我们可以使用numba库或者使用cupy库来实现GPU编程。 壹、numba Numba 是一个开源的 JIT (Just-In-Time) 编译器&#xff0c;它可以将 Python 代码转换成机器代码以提高性能。Numba 特别适用于需要高性能计算的…...

C#中的枚举类-自定义属性

在实际开发过程中&#xff0c;我们常常会用到枚举类&#xff0c;使用枚举的时候往往有着各种使用条件&#xff0c;如何给枚举加入使用条件呢&#xff1f; 答案就是我们的——自定义属性 废话不多说&#xff0c;上代码 枚举类 首先我们要有一个枚举类 public enum XXXX枚举…...

多态深度剖析

前言 继承是多态的基础&#xff0c; 如果对于继承的知识还不够了解&#xff0c; 可以去阅读上一篇文章 继承深度剖析 基本概念与定义 概念&#xff1a; 通俗来说&#xff0c;就是多种形态。具体点就是去完成某个行为&#xff0c; 当不同的对象去完成时会产生出不同的状…...

OSPF被动接口配置(华为)

#交换设备 OSPF被动接口配置 一、基本概念 OSPF被动接口&#xff0c;也称为抑制接口&#xff0c;即将路由器某一接口配置为被动接口后&#xff0c;该接口不会再接受和发送OSPF报文 二、使用场景 在路由器与终端相近或者直接相连的一侧配置被动接口 因为OSPF会定期发送报文…...

Android --- 异步操作

同步和异步的差异 同步&#xff1a;在发生某件事后什么也不做&#xff0c;直到该事件完成后&#xff0c;再继续进行 异步&#xff1a;在某件事发生后&#xff0c;可以在等待他完成的时候去处理其他事件&#xff0c;等到该事件发生完成后&#xff0c;再回过头来处理它。 异步…...

(55)MOS管专题--->(10)MOS管的封装

(10)MOS管的封装 1 目录 (a)IC简介 (b)数字IC设计流程 (c)Verilog简介 (d)MOS管的封装 (e)结束 1 IC简介 (a)在IC设计中,设计师使用电路设计工具(如EDA软件)来设计和模拟各种电路,例如逻辑电路、模拟电路、数字信号处理电路等。然后,根据设计电路的…...

超高清图像生成新SOTA!清华唐杰教授团队提出Inf-DiT:生成4096图像比UNet节省5倍内存。

清华大学唐杰教授团队最近在生成超高清图像方面的新工作&#xff1a;Inf-DiT&#xff0c;通过提出一种单向块注意力机制&#xff0c;能够在推理过程中自适应调整内存开销并处理全局依赖关系。基于此模块&#xff0c;该模型采用了 DiT 结构进行上采样&#xff0c;并开发了一种能…...

网络安全 - DNS劫持原理 + 实验

DNS 劫持 什么是 DNS 为什么需要 DNS D N S \color{cyan}{DNS} DNS&#xff08;Domain Name System&#xff09;即域名系统。我们常说的 DNS 是域名解析协议。 DNS 协议提供域名到 IP 地址之间的解析服务。计算机既可以被赋予 IP 地址&#xff0c;也可以被赋予主机名和域名。用…...

MyBatis的运行原理

目录 1、目的&#xff1a;梳理一下MyBatis运行时的几个对象&#xff0c;我们需要搞清楚他们的作用&#xff0c;进而需要理解mybatis的整个工作流程和执行原理。 2、简要概括各个类 2.1 Resources 作用&#xff1a;编写资源加载类&#xff0c;使用类加载器加载 配置文件(myb…...

算法题解记录29+++全排列(百日筑基)

一、题目描述 题目难度&#xff1a;中等 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示…...

苹果AI功能,AI训练数据缺乏,SD3推出,MJ6推出新特性

更多信息&#xff1a; https://agifun.love 智源社区 2024智源大会议程公开丨大模型前沿探索 2024年6月14日-15日&#xff0c;第6届北京智源大会将以线下与线上结合的形式召开&#xff0c;线下会场设在中关村国家自主创新示范区会议中心。2024智源大会再次以全球视野&#x…...

超越中心化:Web3如何塑造未来数字生态

随着技术的不断发展&#xff0c;人们对于网络和数字生态的期望也在不断提升。传统的中心化互联网模式虽然带来了便利&#xff0c;但也暴露出了诸多问题&#xff0c;比如数据滥用、信息泄露、权力集中等。在这样的背景下&#xff0c;Web3技术应运而生&#xff0c;旨在打破传统中…...

【ic-tool】timegen使用

一、前言 TimeGen是一个用于时序波形编辑的CAD工具&#xff0c;它允许数字设计工程师快速有效地绘制数字时序图。TimeGen时序图可以很容易地导出到其他窗口程序&#xff0c;如microsoftword&#xff0c;用于编写设计规范。可直接从官网下载TimeGEN软件&#xff1a;TimeGen Pro…...

1:25万基础电子地图(云南版)

我们在《50幅1:25万基础电子地图&#xff08;四川版&#xff09;》一文中&#xff0c;为你分享过四川的50幅基础电子地图。 现在我们再为你分享云南的1&#xff1a;25万基础电子地图&#xff0c;你可以在文末查看该数据的领取方法。 基础电子地图云南版 下载后可以看到该数据…...

网站开发的核心技术/新网站如何推广

小X 正困在一个密室里&#xff0c;他希望尽快逃出密室。 密室中有N 个房间&#xff0c;初始时&#xff0c;小X 在1 号房间&#xff0c;而出口在N 号房间。 密室的每一个房间中可能有着一些钥匙和一些传送门&#xff0c;一个传送门会单向地创造一条从房间X 到房间Y 的通道。另外…...

删除wordpress文章日期/百度关键词推广方案

一、目的 减少操作系统安装过程中人机交互过程&#xff0c;实现选择光盘安装后&#xff0c;无需其他人机交互过程即可自动完成操作系统的安装。 二、环境和软件工具 环境&#xff1a;Linux Ubuntu/CentOS操作系统&#xff08;其他发行版未作尝试&#xff09; 软件&#xff…...

做网站要用什么语言/360搜索引擎优化

2019独角兽企业重金招聘Python工程师标准>>> 1.play2.2 run配置 下载play 2 App -Xms512M -Xmx1024M -Xss1M -XX:CMSClassUnloadingEnabled -XX:MaxPermSize256M 2.新增jar包&#xff1a; 可以直接放在项目目录下的lib下&#xff08;没有的话自己建一个&#xff09…...

宜宾建设招标网站/搜索广告是什么

2018年中考学校录取分数线尚未公布&#xff0c;以下是2017年录取分数线&#xff0c;仅供参考&#xff01;菏泽二中统招线&#xff1a;613.5。指标生调剂线&#xff1a;604。最低线&#xff1a;513.5。体育&#xff1a;481。音乐&#xff1a;475.5。美术&#xff1a;428。曹州一…...

开服网站建设/厦门seo计费

题目&#xff1a; 给定 n 个非负整数 a1&#xff0c;a2&#xff0c;...&#xff0c;an&#xff0c;每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线&#xff0c;垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线&#xff0c;使得它们与 x 轴共同构成…...

东山县建设银行网站/百度云盘登录入口

**** SQL server 安装与基础使用**** 一&#xff0e;安装SQL Server 2008 R2企业版&#xff08;64位&#xff09;x64前的准备二、安装SQL server 要安装.NET的组件 三&#xff0e;插入SQL server 光盘 默认下一步即可。 默认下一步 安装完成后打开Microsoft SQL Server Mama…...