正则表达式语法详解(python)

目录

引言

第一部分:正则表达式基础

1. 什么是正则表达式?

2. 正则表达式的组成

3. 正则表达式的执行过程

第二部分:常用正则表达式元字符

1. 点号(.)

2. 星号(*)

3. 加号(+)

4. 问号(?)

5. 花括号({})

6. 方括号([])

7. 脱字符(^)

8. 美元符号($)

第三部分:高级正则表达式技巧

1. 捕获组

2. 反向引用

3. 非捕获组

4. 前瞻断言与后瞻断言

5. 贪婪与非贪婪模式

第四部分:正则表达式实战案例

1. 电子邮件地址验证

2. 电话号码提取

3. HTML标签清理

第五部分:常见错误与陷阱

1. 忘记转义特殊字符

2. 误用量词导致的性能问题

3. 忽略字符编码问题


引言

正则表达式(Regular Expression,简称 regex 或 regexp)是一种强大的文本处理工具,广泛应用于各种编程语言和工具中。无论是用于搜索、替换、验证还是提取特定模式的数据,正则表达式都能提供高效且灵活的解决方案。本文将详细介绍正则表达式的基本概念、常用元字符、高级技巧以及实战案例,帮助读者从入门到精通。

第一部分:正则表达式基础

1. 什么是正则表达式?

正则表达式是一种描述字符串模式的语言。它允许你定义一个模式,然后用这个模式来匹配、查找、替换或验证字符串。正则表达式通常用于文本处理任务,如搜索和替换文本中的特定模式。

2. 正则表达式的组成
  • 字符集:普通字符(如字母、数字)和特殊字符(如元字符)。
  • 元字符:具有特殊含义的字符,如 .*+ 等。
  • 量词:指定字符或字符集出现的次数,如 *+?{}
  • 断言:指定匹配条件,如 ^$\b
3. 正则表达式的执行过程

正则表达式引擎会从左到右扫描输入字符串,并尝试匹配定义的模式。如果找到匹配项,引擎会返回匹配的结果;否则,返回不匹配的结果。正则表达式引擎支持多种匹配模式,如贪婪匹配和非贪婪匹配。

第二部分:常用正则表达式元字符

1. 点号(.)
  • 含义:匹配除换行符外的任意单个字符。
  • 示例a.b 可以匹配 a1ba ba$b 等。
2. 星号(*)
  • 含义:匹配前一个字符零次或多次。
  • 示例ab*c 可以匹配 acabcabbc 等。
3. 加号(+)
  • 含义:匹配前一个字符一次或多次。
  • 示例ab+c 可以匹配 abcabbcabbbc 等。
4. 问号(?)
  • 含义:匹配前一个字符零次或一次。
  • 示例ab?c 可以匹配 acabc
5. 花括号({})
  • 含义:指定某个模式出现的具体次数。
  • 示例a{2,4} 可以匹配 aaaaaaaaa
6. 方括号([])
  • 含义:匹配方括号内的任一字符。
  • 示例[abc] 可以匹配 abc
7. 脱字符(^)
  • 含义:在方括号内表示非该范围内的字符;在字符串开头表示非此模式。
  • 示例[^abc] 可以匹配除 abc 以外的任何字符;^abc 表示以 abc 开头的字符串。
8. 美元符号($)
  • 含义:表示字符串的结尾。
  • 示例abc$ 表示以 abc 结尾的字符串。

第三部分:高级正则表达式技巧

1. 捕获组
  • 含义:使用圆括号 () 创建捕获组,可以提取匹配的部分。
  • 示例(ab)c 可以匹配 abc,并且捕获组会捕获 ab
2. 反向引用
  • 含义:利用捕获组实现复杂匹配,使用 \1\2 等反向引用。
  • 示例(\w+)\1 可以匹配连续两次出现的单词,如 testtest
3. 非捕获组
  • 含义:使用 (?:...) 创建非捕获组,不会被捕获。
  • 示例(?:ab)c 可以匹配 abc,但不会捕获 ab
4. 前瞻断言与后瞻断言
  • 正向前瞻断言(?=...),匹配后面跟指定模式的字符串。
  • 负向前瞻断言(?!...),匹配后面不跟指定模式的字符串。
  • 正向后瞻断言(?<=...),匹配前面有指定模式的字符串。
  • 负向后瞻断言(?<!...),匹配前面没有指定模式的字符串。
  • 示例abc(?=def) 可以匹配 abc,但前提是后面必须跟着 def
5. 贪婪与非贪婪模式
  • 贪婪模式:量词默认是贪婪的,尽可能多地匹配字符。
  • 非贪婪模式:在量词后加上 ?,尽可能少地匹配字符。
  • 示例a.*b 贪婪模式匹配 a...ba.*?b 非贪婪模式匹配 a...b 中的第一个 b

第四部分:正则表达式实战案例

1. 电子邮件地址验证
  • 需求:验证一个字符串是否符合电子邮件地址的格式。
  • 正则表达式^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
  • 示例
    import re
    
    email_pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
    test_emails = ["example@example.com", "invalid-email", "user@domain.co.uk"]
    
    for email in test_emails:
        if re.match(email_pattern, email):
            print(f"{email} 是有效的电子邮件地址")
        else:
            print(f"{email} 是无效的电子邮件地址")
2. 电话号码提取
  • 需求:从文本中提取电话号码。
  • 正则表达式\d{3}-\d{3}-\d{4}
  • 示例
    import re
    
    phone_pattern = r'\d{3}-\d{3}-\d{4}'
    text = "请拨打 123-456-7890 或者 987-654-3210 联系我们。"
    
    phone_numbers = re.findall(phone_pattern, text)
    print("提取的电话号码:", phone_numbers)
3. HTML标签清理
  • 需求:从字符串中去除HTML标签。
  • 正则表达式<[^>]+>
  • 示例
    import re
    
    html_pattern = r'<[^>]+>'
    text = "<p>这是一个段落。</p><div>这是另一个段落。</div>"
    
    cleaned_text = re.sub(html_pattern, '', text)
    print("清理后的文本:", cleaned_text)

第五部分:常见错误与陷阱

1. 忘记转义特殊字符
  • 问题:特殊字符如 .*+?()[]{}|\ 需要转义。
  • 解决方法:使用反斜杠 \ 转义特殊字符。
2. 误用量词导致的性能问题
  • 问题:贪婪量词可能导致正则表达式引擎进行大量不必要的回溯。
  • 解决方法:使用非贪婪量词或优化正则表达式。
3. 忽略字符编码问题
  • 问题:处理非ASCII字符时,忽略字符编码可能导致匹配失败。
  • 解决方法:确保正则表达式和输入字符串使用相同的字符编码

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

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

相关文章

LabVIEW弧焊参数测控系统

在现代制造业中&#xff0c;焊接技术作为关键的生产工艺之一&#xff0c;其质量直接影响到最终产品的性能与稳定性。焊接过程中&#xff0c;电流、电压等焊接参数的精确控制是保证焊接质量的核心。基于LabVIEW开发的弧焊参数测控系统&#xff0c;通过实时监控和控制焊接过程中关…

CentOS网络配置

上一篇文章&#xff1a;VMware Workstation安装Centos系统 在CentOS系统中进行网络配置是确保系统能够顺畅接入网络的重要步骤。本文将详细介绍如何配置静态IP地址、网关、DNS等关键网络参数&#xff0c;以帮助需要的人快速掌握CentOS网络配置的基本方法和技巧。通过遵循本文的…

低速接口项目之串口Uart开发(一)——串口UART

本节目录 一、串口UART 二、串口协议 三、串口硬件 四、往期文章链接本节内容 一、串口UART 串口UART,通用异步收发传输器&#xff08;Universal Asynchronnous Receiver / Transmitter&#xff09;,一种异步收发传输器&#xff0c;全双工传输。数据发送时&#xff0c;将并行…

Uni-APP+Vue3+鸿蒙 开发菜鸟流程

参考文档 文档中心 运行和发行 | uni-app官网 AppGallery Connect DCloud开发者中心 环境要求 Vue3jdk 17 Java Downloads | Oracle 中国 【鸿蒙开发工具内置jdk17&#xff0c;本地不使用17会报jdk版本不一致问题】 开发工具 HBuilderDevEco Studio【目前只下载这一个就…

SQL 外连接

1 外连接 外连接是一种用于结合两个或多个表的方式&#xff0c;返回至少一个表中的所有记录。 左外连接 LEFT JOIN&#xff0c;左表为驱动表&#xff0c;右表为从表。返回驱动表的所有记录以及从表中的匹配记录。如果从表没有匹配&#xff0c;则结果中从表的部分为NULL。 右…

笔记|M芯片MAC (arm64) docker上使用 export / import / commit 构建amd64镜像

很简单的起因&#xff0c;我的东西最终需要跑在amd64上&#xff0c;但是因为mac的架构师arm64&#xff0c;所以直接构建好的代码是没办法跨平台运行的。直接在arm64上pull下来的docker镜像也都是arm64架构。 检查镜像架构&#xff1a; docker inspect 8135f475e221 | grep Arc…

SAP+Internet主题HTML样式选择

SAP目前只支持三种HTML样式选择&#xff1a; 样式一 背景色&#xff1a;深色&#xff0c;蓝 特点&#xff1a;适中型排列&#xff0c;与SAP界面排列相同&#xff0c;富含UI特征&#xff0c;整齐美观 URL地址&#xff1a;http://cn1000-sap-01.sc.com:8000/sap/bc/gui/sap/it…

使用 Qt 实现基于海康相机的图像采集和显示系统(不使用外部视觉库,如Halcon\OpenCv)[工程源码联系博主索要]

本文将梳理一个不借助外部视觉库&#xff08;如 OpenCV/Halcon&#xff09;的海康相机图像采集和显示 Demo。该程序直接使用 Qt GUI 来显示图像。通过海康 MVS SDK 实现相机的连接、参数设置、图像采集和异常处理等功能&#xff0c;并通过 Qt 界面展示操作结果。 1. 功能概述 …

C# 异步Task异常处理和堆栈追踪显示

Task的问题 在C#中异步Task是一个很方便的语法&#xff0c;经常用在处理异步&#xff0c;例如需要下载等待等方法中&#xff0c;不用函数跳转&#xff0c;代码阅读性大大提高&#xff0c;深受大家喜欢。 但是有时候发现我们的异步函数可能出现了报错&#xff0c;但是异常又没…

31.3 XOR压缩和相关的prometheus源码解读

本节重点介绍 : xor 压缩value原理xor压缩过程讲解xor压缩prometheus源码解读xor 压缩效果 xor 压缩value原理 原理:时序数据库相邻点变化不大&#xff0c;采用异或压缩float64的前缀和后缀0个数 xor压缩过程讲解 第一个值使用原始点存储计算和前面的值的xor 如果XOR值为0&…

游戏引擎学习第16天

视频参考:https://www.bilibili.com/video/BV1mEUCY8EiC/ 这些字幕讨论了编译器警告的概念以及如何在编译过程中启用和处理警告。以下是字幕的内容摘要&#xff1a; 警告的定义&#xff1a;警告是编译器用来告诉你某些地方可能存在问题&#xff0c;尽管编译器不强制要求你修复…

解析煤矿一张图

解析煤矿一张图 ​ 煤矿一张图是指通过数字化、智能化技术将煤矿的各项信息、数据和资源进行集中展示和管理&#xff0c;形成一个综合的可视化平台。这一平台将矿井的地理信息、设备状态、人员位置、安全生产、环境监测等信息整合成一个统一的“图形”&#xff0c;以便于管理者…

Python学习27天

字典 dict{one:1,two:2,three:3} # 遍历1&#xff1a; # 先取出Key for key in dict:# 取出Key对应的valueprint(f"key:{key}---value:{dict[key]}")#遍历2&#xff0c;依次取出value for value in dict.values():print(value)# 遍历3&#xff1a;依次取出key,value …

【伪造检测】Noise Based Deepfake Detection via Multi-Head Relative-Interaction

一、研究动机 [!note] 动机&#xff1a;目前基于噪声的检测是利用Photo Response Non-Uniformity (PRNU)实现的&#xff0c;这是一种由于相机感光传感器而造成的缺陷噪声&#xff0c;主要用图像的源识别&#xff0c;在伪造检测的任务中并没有很好的表现。因此在文中提出了一种基…

【eNSP】企业网络架构实验——vlan间的路由通信(三)

VLAN间的路由是指不同VLAN之间的通信&#xff0c;通常VLAN是用来分割网络流量和提高网络安全性的。 一、VLAN 1. 什么是VLAN&#xff1f; VLAN&#xff0c;全称是虚拟局域网&#xff08;Virtual Local Area Network&#xff09;&#xff0c;是一种将物理局域网&#xff08;LA…

github 模型下载方法

github 模型权重&#xff0c;如果是项目下载&#xff0c;pth文件有时下载后只有1kb 本人测试ok下载方法&#xff1a; 点击view raw&#xff0c;然后可以下载模型权重文件了。

【微软:多模态基础模型】(2)视觉理解

欢迎关注【youcans的AGI学习笔记】原创作品 【微软&#xff1a;多模态基础模型】&#xff08;1&#xff09;从专家到通用助手 【微软&#xff1a;多模态基础模型】&#xff08;2&#xff09;视觉理解 【微软&#xff1a;多模态基础模型】&#xff08;3&#xff09;视觉生成 【微…

Dolby TrueHD和Dolby Digital Plus (E-AC-3)编码介绍

文章目录 1. Dolby TrueHD特点总结 2. Dolby Digital Plus (E-AC-3)特点总结 Dolby TrueHD 与 Dolby Digital Plus (E-AC-3) 的对比 Dolby TrueHD和Dolby Digital Plus (E-AC-3) 是两种高级的杜比音频编码格式&#xff0c;常用于蓝光影碟、流媒体、影院等高品质音频传输场景。它…

基于SpringBoot的养老院管理系统+文档

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

Figma汉化:提升设计效率,降低沟通成本

在UI设计领域&#xff0c;Figma因其强大的功能而广受欢迎&#xff0c;但全英文界面对于国内设计师来说是一个不小的挑战。幸运的是&#xff0c;通过Figma汉化插件&#xff0c;我们可以克服语言障碍。以下是两种获取和安装Figma汉化插件的方法&#xff0c;旨在帮助国内的UI设计师…