Python正则表达式学习

Python正则表达式全攻略

一、正则表达式基础

1. 什么是正则表达式?

  • 用于描述字符串匹配规则的表达式
  • 广泛应用于文本处理、表单验证、数据清洗等领域

2. Python中的re模块

import re

3. 基础语法

字符说明示例
.匹配任意字符(除换行)a.c → abc
\d数字 [0-9]\d\d → 42
\D非数字\D → a
\w字母数字下划线\w+ → Ab3_
\W非单词字符\W → %
\s空白字符\s → 空格
\S非空白字符
^字符串开始^abc
$字符串结束xyz$

二、量词与分组

1. 量词

*      # 0次或多次
+      # 1次或多次
?      # 0次或1次
{n}    # 正好n次
{n,}   # 至少n次
{n,m}  # n到m次

2. 分组与或运算

()       # 捕获分组
(?:)     # 非捕获分组
|        # 或运算
(?P<name>) # 命名分组

三、re模块常用方法

1. 匹配方法

re.match()     # 从字符串起始位置匹配
re.search()    # 扫描整个字符串
re.findall()   # 返回所有匹配结果
re.finditer()  # 返回迭代器
re.sub()       # 替换匹配内容

2. 使用示例

text = "Phone: 123-456-7890, 555-1234"# 查找所有电话号码
numbers = re.findall(r'\d{3}-\d{3}-\d{4}', text)# 替换电话号码格式
new_text = re.sub(r'(\d{3})-(\d{3})-(\d{4})', r'(\1) \2-\3', text)

四、进阶技巧

1. 编译正则表达式

pattern = re.compile(r'\b[A-Za-z]+\b')
matches = pattern.findall(text)

2. 标志参数

re.IGNORECASE  # 忽略大小写
re.MULTILINE   # 多行模式
re.DOTALL      # 使.匹配换行符

3. 贪婪与非贪婪

.*    # 贪婪匹配
.*?   # 非贪婪匹配

4. 前后断言

(?=exp)   # 正向后行断言
(?!exp)   # 负向后行断言
(?<=exp)  # 正向前行断言
(?<!exp)  # 负向前行断言

五、实战案例

1. 邮箱验证

email_pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
is_valid = re.match(email_pattern, "user@example.com")

2. 提取网页链接

html = '<a href="https://example.com">Link</a>'
links = re.findall(r'href=["\'](https?://.*?)["\']', html)

3. 日志分析

log = "2023-08-20 14:30:45 [ERROR] Connection timeout"
pattern = r'(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2}) \[(\w+)\] (.*)'
match = re.match(pattern, log)

4. 数据清洗

dirty_data = "Price: $1,234.56 (50% OFF!)"
clean = re.sub(r'[^\d.]', '', dirty_data)  # 保留数字和小数点

5. 复杂密码验证

password_pattern = r'''
^(?=.*[A-Z])       # 至少一个大写字母
(?=.*[a-z])       # 至少一个小写字母
(?=.*\d)          # 至少一个数字
(?=.*[@$!%*?&])   # 至少一个特殊字符
[A-Za-z\d@$!%*?&]{8,}$  # 总长度至少8
'''
is_strong = re.search(password_pattern, "Passw0rd!", re.VERBOSE)

六、性能优化

  1. 预编译常用正则表达式
  2. 避免过度使用.*
  3. 使用原子组防止回溯爆炸
  4. 优先使用具体字符集代替.
  5. 合理使用^和$锚定

七、常见问题

  1. 特殊字符未转义(如.需要写成.)
  2. 贪婪匹配导致意外结果
  3. 忘记处理多行模式
  4. 分组引用错误(\1 vs $1)
  5. Unicode字符处理

八、调试工具推荐

  1. RegExr 在线测试工具
  2. Python的re.DEBUG标志
  3. regex101 可视化分析

通过这个教程,你可以逐步掌握:

  1. 从基础匹配到高级模式的应用
  2. 常见文本处理场景的解决方案
  3. 正则表达式性能优化技巧
  4. 复杂模式的设计与调试方法

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

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

相关文章

20250218 隨筆 垂直分库分表(Vertical Sharding) 和 水平分库分表(Horizontal Sharding)

垂直分库分表&#xff08;Vertical Sharding&#xff09; 和 水平分库分表&#xff08;Horizontal Sharding&#xff09; 是数据库拆分的两种策略。它们在大规模数据库优化、分布式架构设计中至关重要&#xff0c;主要用于 降低单库压力、提高查询效率、支持高并发。 1. 垂直分…

notepad++右键菜单不见了

卸载时没点击完成&#xff0c;又重新安装了一个&#xff0c;最终导致了一些bug&#xff0c;导致右键没有notepad菜单。 解决方式&#xff1a; 新建一个register.reg文件&#xff0c;加入以下代码&#xff0c;然后双击执行即可 代码说明&#xff1a;Open with Notepad 是右…

重定向与文件缓冲机制

目录 一、重定向的原理与实践 1. 输出重定向&#xff1a;让数据流向新目的地 2. 追加重定向&#xff1a;在文件末尾追加数据 3. 输入重定向&#xff1a;从指定文件读取数据 4. 标准输出流与标准错误流的区别 5. 使用 dup2 实现重定向 二、FILE 结构体的奥秘 1. FILE 中的…

DeepSeek 冲击(含本地化部署实践)

DeepSeek无疑是春节档最火爆的话题&#xff0c;上线不足一月&#xff0c;其全球累计下载量已达4000万&#xff0c;反超ChatGPT成为全球增长最快的AI应用&#xff0c;并且完全开源。那么究竟DeepSeek有什么魔力&#xff0c;能够让大家趋之若鹜&#xff0c;他又将怎样改变世界AI格…

显微镜下的人体结构

显微镜下的人体结构&#xff0c;看完以后&#xff0c;你还觉得人类是进化而来的吗&#xff1f;...... 第一张&#xff1a;电子显微镜所观察到的人类血管&#xff0c;可以非常清楚的看到里面的白细胞和红细胞 第二张&#xff1a;正在分泌耳垢&#xff08;耳屎&#xff09;的耳道…

DApp 开发入门指南

DApp 开发入门指南 &#x1f528; 1. DApp 基础概念 1.1 什么是 DApp&#xff1f; 去中心化应用&#xff08;DApp&#xff09;是基于区块链的应用程序&#xff0c;特点是&#xff1a; 后端运行在区块链网络前端可以是任何框架使用智能合约处理业务逻辑数据存储在区块链上 1…

鸿蒙状态管理概述 v2

状态管理v2 概述状态管理之v2ObservedV2 和 Trace状态管理V1版本对嵌套类对象属性变化直接观测的局限性ObservedV2 和 Trace 使用场景 Local状态管理V1版本State装饰器的局限性 Param状态管理V1版本接受外部传入的装饰器的局限性 OnceEventComputedComputed 使用场景 TypePersi…

Git中revert和reset区别?

git revert 和 git reset 都用于撤销 Git 中的提交&#xff0c;但它们的作用和使用场景不同&#xff1a; git revert: 作用&#xff1a;创建一个新的提交&#xff0c;撤销指定的提交内容。使用场景&#xff1a;用于“回滚”已推送到远程仓库的提交。这种方法不会改变提交历史&a…

LabVIEW开发中的电机控制与相机像素差

在电机控制系统中&#xff0c;我们需要精确控制电机运动与相机拍摄画面之间的关系。理想情况下&#xff0c;当电机带动相机移动同样的距离时&#xff0c;相机拍摄画面中两点之间的像素差应当是一个固定值。然而&#xff0c;在实际应用中&#xff0c;我们发现这一像素差并非固定…

从零到一:构建现代 React 应用的完整指南

1. create-react-app (CRA) 简介: create-react-app 是官方推荐的 React 项目脚手架工具,提供了一个开箱即用的开发环境,帮助开发者快速启动 React 应用。它会自动配置 Webpack、Babel、ESLint 等工具,让你专注于开发而不需要手动配置工具链。 特点: 零配置:CRA 自动配…

rman 备份恢复1

前提&#xff1a; rman用户必须具有sysdba权限 使用常用连接方式如下&#xff1a; rman target / rman target sys/oracle rman target sys/oracleprod1 catalog dav/oracledav_db 一个rman连接会产生两个进程&#xff0c;action字段为空的就是rman的监控进程&#xff0c;另…

Qt程序退出相关资源释放问题

目录 问题背景&#xff1a; aboutToQuit 代码举例 closeEvent事件 代码举例 程序退出方式 quit() exit(int returnCode 0) close() 问题背景&#xff1a; 实际项目中程序退出前往往需要及进行一些资源释放、配置保存、线程中断等操作&#xff0c;避免资源浪费&#xff…

【DeepSeek】Mac m1电脑部署DeepSeek

一、电脑配置 个人电脑配置 二、安装ollama 简介&#xff1a;Ollama 是一个强大的开源框架&#xff0c;是一个为本地运行大型语言模型而设计的工具&#xff0c;它帮助用户快速在本地运行大模型&#xff0c;通过简单的安装指令&#xff0c;可以让用户执行一条命令就在本地运…

[生活杂项][运动教程]自由泳

https://v.youku.com/v_show/id_XMzgzMjkwMzg0MA.html?spma2h0k.11417342.soresults.dtitle https://v.youku.com/v_show/id_XMzgxNjM2NjY4NA.html?spma2h0k.11417342.soresults.dtitle

Linux的指令与热键

一.指令 1.pwd :显示一个用户当前所处的目录 2.ls :显示当前目录下的文件&#xff08;显示当前文件属性&#xff09; ls -l :显示当前目录下文件的属性及更多内容&#xff08;ll是ls -l的别名&#xff0c;用法相同&#xff09; ls -l 目录&#xff1a;显示指定目录内容 ls…

【Dubbo+Zookeeper】——SpringBoot+Dubbo+Zookeeper知识整合

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大二学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…

【OS安装与使用】part5-ubuntu22.04基于conda安装pytorch+tensorflow

文章目录 一、待解决问题1.1 问题描述1.2 解决方法 二、方法详述2.1 必要说明2.2 应用步骤2.2.1 明确pytorch安装依赖2.2.2 conda创建虚拟环境2.2.3 安装pytorch2.2.4 验证pytorch安装2.2.5 安装Tensorflow2.2.6 验证Tensorflow安装 三、疑问四、总结 一、待解决问题 1.1 问题…

马拉车算法

Manacher算法 ,用于处理最长回文字符串的问题&#xff0c;可以在O&#xff08;n&#xff09;的情况下&#xff0c;求出一个字符串的最长回文字符串 回文串的基础解法&#xff1a; 以每个点为中心对称点&#xff0c;看左右两边的点是否相同。这种算法的时间复杂度为O&#xff0…

气象学中的CDO插值(多方法+多分辨率)

文章目录 说明CDO代码 说明 需要新建.sh脚本文件&#xff0c;将下面的CDO代码复制到.sh脚本中&#xff0c;然后运行插值程序。 CDO代码 #!/bin/bash # # 用户配置区&#xff08;按实际需求修改&#xff09; # input_directory"2m_temperature" # 自定义路径 gr…

计算机网络:应用层 —— 动态主机配置协议 DHCP

文章目录 什么是 DHCP&#xff1f;DHCP 的产生背景DHCP 的工作过程工作流程地址分配机制 DHCP 中继代理总结 什么是 DHCP&#xff1f; 动态主机配置协议&#xff08;DHCP&#xff0c;Dynamic Host Configuration Protocol&#xff09;是一种网络管理协议&#xff0c;用于自动分…