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

python re模块常用方法

正则表达式基础语法

正则表达式(Regular Expression)是用于匹配字符串模式的工具,Python通过re模块提供支持。以下为常见语法:

  • .:匹配任意字符(除换行符)
  • \d:匹配数字(等价于[0-9]
  • \w:匹配字母、数字或下划线(等价于[a-zA-Z0-9_]
  • \s:匹配空白字符(空格、制表符等)
  • []:匹配括号内的任意一个字符(如[aeiou]匹配元音字母)
  • ^:匹配字符串开头(或在[]内表示取反)
  • $:匹配字符串结尾
  • *:匹配前一个字符0次或多次
  • +:匹配前一个字符1次或多次
  • ?:匹配前一个字符0次或1次
  • {n}:匹配前一个字符恰好n次
  • |:或操作(如a|b匹配a或b)

Python re模块常用方法

Python的re模块提供以下核心函数:

  • re.match(pattern, string):从字符串开头匹配模式,返回Match对象或None
  • re.search(pattern, string):扫描整个字符串寻找匹配,返回第一个匹配的Match对象。
  • re.findall(pattern, string):返回所有非重叠匹配的列表。
  • re.sub(pattern, repl, string):将匹配的模式替换为指定字符串。
  • re.compile(pattern):预编译正则表达式,提升重复使用效率。
import re
text = "Python 3.10 released on 2021-10-04"
# 提取日期
date_match = re.search(r'\d{4}-\d{2}-\d{2}', text)
print(date_match.group())  # 输出: 2021-10-04

分组与捕获

使用括号()创建捕获组,可通过group()方法获取:

pattern = r'(\w+) (\d+)'
match = re.search(pattern, "Python 3")
print(match.group(1))  # 输出: Python
print(match.group(2))  # 输出: 3

mo

命名分组使用(?P<name>...)语法:

pattern = r'(?P<lang>\w+) (?P<ver>\d+)'
match = re.search(pattern, "Python 3")
print(match.group('lang'))  # 输出: Python

贪婪与非贪婪匹配

默认情况下,量词(*, +, ?, {})是贪婪的,会尽可能匹配更多字符。添加?转换为非贪婪模式:

# 贪婪匹配
greedy = re.search(r'<.*>', '<div>text</div>')
print(greedy.group())  # 输出: <div>text</div># 非贪婪匹配
non_greedy = re.search(r'<.*?>', '<div>text</div>')
print(non_greedy.group())  # 输出: <div>

常用正则表达式示例

  • 邮箱验证

    pattern = r'^[\w\.-]+@[\w\.-]+\.\w+$'
    re.match(pattern, "user@example.com")
    

  • URL提取

    pattern = r'https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+'
    re.findall(pattern, "Visit https://www.example.com")
    

  • 电话号码匹配(简单版):

    pattern = r'\d{3}-\d{3}-\d{4}'
    re.search(pattern, "Call 123-456-7890")
    

性能优化建议

  1. 预编译正则:频繁使用的模式应通过re.compile()预编译。

    compiled_pattern = re.compile(r'\d+')
    compiled_pattern.findall("123 abc 456")
    

  2. 避免回溯灾难:复杂模式可能导致性能问题,尽量使用具体匹配范围。

  3. 使用原始字符串:在模式字符串前加r(如r'\d')避免转义字符混淆。

http://www.xdnf.cn/news/1353151.html

相关文章:

  • MySQL详细介绍指南
  • 蓝牙aoa仓库管理系统功能介绍
  • [e3nn] 归一化 | BatchNorm normalize2mom
  • 【技术突破】动态目标误检率↓83.5%!陌讯多模态融合算法在智慧城管的实战优化
  • 基于电力电子变压器的高压脉冲电源方案复现
  • 使用 Certbot 申请 Apache 证书配置棘手问题
  • 【数据结构】计数排序:有时比快排还快的整数排序法
  • Ubuntu 操作系统深度解析:从入门到精通(2025 最新版)
  • Java JVM 超级详细指南
  • 在Linux环境中为Jupyter Lab安装Node.js环境
  • 云计算之云主机Linux是什么?有何配置?如何选?
  • JavaSpring+mybatis+Lombok,实现java架构[保姆教程]
  • Linux PCI 子系统:工作原理与实现机制深度分析
  • Bartender 5 Mac 多功能菜单栏管理
  • 【LeetCode】85. 最大矩形 (暴力枚举)
  • 嵌入式软件/硬件工程师面试题集
  • MySql知识梳理之DDL语句
  • 力扣hot100:搜索二维矩阵与在排序数组中查找元素的第一个和最后一个位置(74,34)
  • 知识蒸馏 Knowledge Distillation 概率链式法则(Probability Chain Rule)
  • Java接口响应速度优化
  • springboot项目结构
  • leetcode80:删除有序数组中的重复项 II(快慢指针法)
  • 日语学习-日语知识点小记-进阶-JLPT-N1阶段蓝宝书,共120语法(6):51-60语法
  • Day33 MLP神经网络的训练
  • 「ECG信号处理——(24)基于ECG和EEG信号的多模态融合疲劳分析」2025年8月23日
  • 前端 H5分片上传 vue实现大文件
  • 【卫星通信】超低码率语音编码ULBC:EnCodec神经音频编解码器架构深度解析
  • piclist+gitee操作指南
  • 【Day 11】238.除自身以外数组的乘积
  • Transformer核心概念I-token