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

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. 复杂模式的设计与调试方法

相关文章:

  • 【力扣Hot 100】栈2
  • 25届国网计算机考试知识难点及习题整理(持续更新)
  • Ubuntu22.04 - gflags的安装和使用
  • Linux 性能调优简单指南
  • 针对Feign客户端请求体参数处理问题
  • 爱普生 SG-8101CE 可编程晶振在笔记本电脑的应用
  • LangChain大模型应用开发:多模态输入与自定义输出
  • SpringBoot+Vue+Mysql苍穹外卖
  • Leetcode 3455. Shortest Matching Substring
  • 【设计模式精讲】结构型模式之代理模式(静态代理、JDK动态代理、cglib动态代理)
  • rust笔记8-Deref与隐式解引用强制转换
  • 从0到1:固件分析
  • 查看cmd下python的安装路径 + Windows 命令行添加环境变量和不重启刷新环境变量
  • 互推机制在开源AI智能名片2+1链动模式S2B2C商城小程序源码推广中的应用探索
  • 机器学习课程的常见章节结构
  • 【系统架构】分布式事务模型详解
  • Express 模块
  • 【工具篇】探索 Notion AI:功能强大的智能写作助手
  • 掌握SQLAlchemy:Python数据库集成的艺术
  • OpenSSL实验
  • 有关网站开发的知识/网站快速优化排名app
  • jsp网站开发 开题依据/兰州seo推广
  • web网站性能测试怎么做/网络营销公司招聘
  • jsp简述网站开发流程/建设网站费用
  • 计算机编程培训班/优化培训课程
  • 章贡区综合网站建设商家/免费网络推广渠道