Python正则表达式实战_模式匹配说明【教程】
技术百科
舞夢輝影
发布时间:2026-01-01
浏览: 次 Python正则表达式需深入理解模式与文本交互:注意贪婪/非贪婪匹配、正确转义元字符(如用[.]或\\)、合理使用Unicode范围或regex库、精确控制量词、区分捕获组与非捕获组、善用命名组及标志位(re.I/re.S/re.M),并优先编译复用。
Python正则表达式不是“写完就能用”,关键在理解模式如何与文本实际交互。匹配失败往往不是语法错,而是没看清目标文本结构、没选对匹配方式(贪婪/非贪婪)、或忽略了默认标志的影响。
字符类和转义要严格对应真实文本
比如想匹配文件路径中的 C:\Users\name\doc.txt,直接写 r"C:\Users\name\doc.txt" 会出错——因为 \U 和 \n 在字符串中被解释为 Unicode 转义和换行符。必须用原始字符串 r"C:\\Users\\name\\doc.txt" 或双反斜杠写法。同理,匹配邮箱里的 @、URL 中的 /、数学表达式中的 +,该加反斜杠就得加,不能凭感觉跳过。
- 常见需转义的元字符:
. ^ $ * + ? { } [ ] \ | ( ) - 用
[.]匹配字面量点号,比\.更直观(尤其在复杂模式中) - 匹配中文、emoji 或特殊符号时,优先用 Unicode 属性(如
\p{Han})需借助regex库;标准re模块只支持[\u4e00-\u9fff]这类区间
量词控制要明确“要几个”和“怎么取”
*(零或多个)、+(一个或多个)、?(零或一个)默认是贪婪匹配,会尽可能吞掉更多字符。例如用 r".*" 匹配 "A
B",结果是一整段,而不是两个独立 div。
- 加
?变成非贪婪:r".*?"才能正确切分 - 用
{m,n}精确控制次数,比如验证手机号:r"1[3-9]\d{9}"(11位,以13–19开头) - 避免过度使用
.*,它容易导致回溯爆炸;能用[^>]+就别用.*?匹配 HTML 标签内容
分组和捕获要区分“要结果”还是“只分组”
圆括号 () 默认既分组又捕获,但有时只需要逻辑分组(比如加 | 或量词),并不想让 re.findall() 返回一堆空元组。这时用非捕获组
(?:...) 更干净。
-
re.search(r"(https?://)(?:www\.)?([a-zA-Z0-9.-]+)", url)中,协议单独捕获,域名也捕获,而www.部分不捕获 - 命名捕获组
(?P让代码可读性大幅提升:...) re.match(r"(?P→\d{4})-(?P \d{2})", "2025-05") .group("year")直接取值 - 注意
re.findall()遇到多个捕获组时,返回的是元组列表;只想要全部匹配项,确保整个模式只有一个组,或改用re.finditer()
标志位影响全局行为,不能只看 pattern
re.IGNORECASE(re.I)让大小写不敏感,re.DOTALL(re.S)让 . 匹配换行符——这两个最常用,但容易被忽略。还有 re.MULTILINE(re.M)改变 ^ 和 $ 的含义:从匹配整个字符串首尾,变成匹配每行首尾。
- 处理多行日志时,用
re.M配合^ERROR.*$才能逐行找错误行 - 写正则时建议显式传 flag,而不是用内联标志
(?i),除非需要局部生效 - 编译正则对象时用
re.compile(..., flags=re.I | re.M),复用更高效,也方便调试
# python
# html
# 邮箱
# 正则表达式
# python正则表达式
# 代码可读性
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Python文本编码与解码_跨平台解析说明【指导】
- php下载安装包怎么选_threadsafe与nt
- VSC怎么在PHP中调试MySQL_数据库交互排查
- Windows10系统怎么查看防火墙状态_Win1
- Win11如何设置电源计划_Win11电源计划优化
- 手机php文件怎么变成mp4_安卓苹果打开php转
- Win11怎么修复系统文件_使用sfc命令修复Wi
- 如何有效拦截拼接式恶意域名的垃圾信息
- php嵌入式多设备通信怎么实现_php同时管理多个
- Windows10电脑怎么连接蓝牙设备_Win10
- MAC如何快速搜索大文件_MAC磁盘空间分析与冗余
- Windows家庭版如何开启组策略(gpedit.
- Windows10电脑怎么查看硬盘通电时间_Win
- Drupal 中渲染节点时出现 HTML 标签嵌套
- Python深度学习实战教程_神经网络模型构建与训
- PythonDocker高级项目部署教程_多容器管
- Win11声音忽大忽小怎么办 Win11音频增强功
- Python数据挖掘核心算法实践_聚类分类与特征工
- 如何更改Windows资源管理器的默认启动位置?(
- Win10怎么限制单程序CPU占用上限_Win10
- php485读数据时阻塞怎么办_php485非阻塞
- Win11怎么设置默认邮件客户端 Win11修改M
- Win11怎么设置桌面图标间距_Windows11
- Win11怎么设置系统还原_Windows11系统
- Python并发安全问题_资源竞争说明【指导】
- Python网络异常模拟_测试说明【指导】
- PHP怎么接收URL中的锚点参数_获取#后面参数值
- 如何在 PHP 单元测试中正确模拟带方法的图像处理
- c++如何打印函数堆栈信息_c++ backtra
- Windows如何使用BitLocker To G
- Windows音频驱动无声音原因解析_声卡驱动错误
- 如何在 Python 测试中动态配置 @backo
- 一文教你快速开通网站LOGO图
- Win11怎么退出高对比度模式_Win11取消反色
- 如何使用Golang反射创建map对象_动态生成键
- Win11怎么设置ipv4地址_Windows 1
- Python文件操作优化_大文件与流处理解析【教程
- Win11任务栏怎么放到顶部_Win11修改任务栏
- 如何使用 Python 合并文件夹内多个 Exce
- c++如何获取map中所有的键_C++遍历键值对提
- php命令行怎么运行_通过CLI模式执行PHP脚本
- 使用类变量定义字符串常量时如何实现类型安全的 Li
- 如何使用Golang sort排序切片_Golan
- 如何在 Go 中可靠地测试含 time.Time
- Win11怎样安装剪映专业版_Win11安装剪映教
- php下载安装后swoole扩展怎么安装_异步框架
- Win10如何更改用户账户控制_Windows10
- Win11如何设置开机自动联网 Win11宽带连接
- Win11怎么开启HDR模式_Windows 11
- 如何在 Go 中正确反序列化多个同级 XML 元素

QQ客服