news 2026/8/6 22:04:49

Python 中的正则

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 中的正则

正则表达式(Regular Expression,简称 Regex)是一种用于匹配、查找、替换文本中的字符串模式的工具。Python 通过内置的re模块支持正则表达式。

一、常用功能

功能说明
模式(Pattern)用于描述匹配规则的字符串
匹配(Match)检查字符串是否符合模式
搜索(Search)在字符串中查找匹配的子串
替换(Replace)将匹配的内容替换为其他字符串

二、常用函数

函数作用返回值
re.match(pattern, string)从字符串开头匹配Match对象或None
re.search(pattern, string)全文搜索第一个匹配Match对象或None
re.findall(pattern, string)查找所有匹配,返回列表列表
re.finditer(pattern, string)查找所有匹配,返回迭代器迭代器
re.sub(pattern, repl, string)替换所有匹配新字符串
re.split(pattern, string)按模式分割字符串列表
re.compile(pattern)编译模式(提高效率)Pattern对象

三、基础语法

1. 字面字符

import re # 直接匹配普通字符 pattern = "hello" text = "hello world" print(re.match(pattern, text)) # <re.Match object> print(re.match("hi", text)) # None

2. 元字符

元字符含义示例
.匹配任意字符(除换行符)a.c匹配abc
^匹配字符串开头^hello
$匹配字符串结尾world$
*匹配 0 次或多次a*匹配"","a","aa"
+匹配 1 次或多次a+匹配"a","aa"
?匹配 0 次或 1 次a?匹配"","a"
{n}匹配正好 n 次a{3}匹配"aaa"
{n,}匹配至少 n 次a{2,}匹配"aa","aaa"
{n,m}匹配 n 到 m 次a{2,4}匹配"aa","aaa","aaaa"
|或(选择)cat|dog匹配catdog
()分组(ab)+匹配ab,abab
[]字符集[aeiou]匹配元音字母
[^]否定字符集[^0-9]匹配非数字
\转义\.匹配.

3. 字符类

字符类含义等价于
\d数字[0-9]
\D非数字[^0-9]
\w单词字符(字母、数字、下划线)[a-zA-Z0-9_]
\W非单词字符[^a-zA-Z0-9_]
\s空白字符(空格、制表符、换行)[ \t\n\r\f\v]
\S非空白字符[^ \t\n\r\f\v]
\b单词边界\bword\b
\B非单词边界

四、常用匹配模式

1. 匹配数字

import re # 整数 re.match(r'\d+', '123abc') # '123' # 浮点数 re.search(r'\d+\.\d+', 'pi=3.14') # '3.14' # 负数 re.search(r'-?\d+', '温度-5度') # '-5'

2. 匹配邮箱

email_pattern = r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' text = '联系我: user@example.com' print(re.search(email_pattern, text).group()) # user@example.com

3. 匹配手机号(中国)

phone_pattern = r'1[3-9]\d{9}' text = '我的电话是13812345678' print(re.search(phone_pattern, text).group()) # 13812345678

五、分组与捕获

1. 基本分组

import re # 使用括号分组 pattern = r'(\d{4})-(\d{2})-(\d{2})' text = '日期: 2024-01-15' match = re.search(pattern, text) if match: print(match.group(0)) # 2024-01-15(完整匹配) print(match.group(1)) # 2024(第一组) print(match.group(2)) # 01(第二组) print(match.group(3)) # 15(第三组) print(match.groups()) # ('2024', '01', '15')

2. 命名分组

pattern = r'(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})' text = '日期: 2024-01-15' match = re.search(pattern, text) if match: print(match.group('year')) # 2024 print(match.group('month')) # 01 print(match.group('day')) # 15

3. 非捕获分组

# 使用 (?:...) 不捕获分组 pattern = r'(?:\d{4})-(?:\d{2})-(?:\d{2})' text = '日期: 2024-01-15' # 匹配但不会保存分组

六、贪婪与非贪婪匹配

模式行为示例
.*贪婪(尽可能多匹配).*匹配整个字符串
.*?非贪婪(尽可能少匹配).*?匹配最小长度
import re text = '<h1>标题</h1><p>段落</p>' # 贪婪匹配:尽量多匹配 print(re.search(r'<.*>', text).group()) # <h1>标题</h1><p>段落</p> # 非贪婪匹配:尽量少匹配 print(re.search(r'<.*?>', text).group()) # <h1>

七、替换与分割

1. 替换

import re text = '我的电话是13812345678,他的电话是13987654321' # 替换所有匹配 result = re.sub(r'\d{11}', '****', text) print(result) # 我的电话是****,他的电话是**** # 使用回调函数替换 def hide_phone(match): return match.group()[:3] + '****' + match.group()[-4:] result = re.sub(r'(\d{11})', hide_phone, text) print(result) # 我的电话是138****5678,他的电话是139****4321

2. 分割

import re text = '苹果,香蕉;橘子 葡萄' # 按多个分隔符分割 result = re.split(r'[,; ]+', text) print(result) # ['苹果', '香蕉', '橘子', '葡萄']

八、编译正则表达式

import re # 编译模式(提高效率) pattern = re.compile(r'\d{3}-\d{4}-\d{4}') text = '电话: 010-1234-5678' print(pattern.search(text).group()) # 010-1234-5678 # 预编译后可以反复使用 phones = ['010-1234-5678', '020-8765-4321', 'invalid'] for phone in phones: if pattern.match(phone): print(f'有效: {phone}')

常用

函数匹配位置返回适用场景
re.match()开头MatchNone检查字符串开头
re.search()全文MatchNone查找第一个匹配
re.findall()全文列表获取所有匹配
re.finditer()全文迭代器遍历所有匹配
re.sub()全文字符串替换所有匹配
re.split()全文列表按模式分割
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/6 22:01:25

DeepSeek Agentic Workflow 翻车实录:Reflection 模式让我的任务延迟暴涨 200%

DeepSeek 智能体工作流实战&#xff1a;爬虫调度系统的模式选择与优化 上周使用 DeepSeek 重构爬虫调度系统时&#xff0c;我深刻体验到了 Agentic Workflow 模式选择的重要性。原本期待能提升 30% 效率的 Reflection 模式&#xff0c;在实际部署后反而导致 P99 延迟从 1.2s 激…

作者头像 李华
网站建设 2026/8/6 22:01:20

电商API接口选型与性能优化实战指南

1. 电商数据接口服务的技术评估框架电商数据接口作为连接企业与第三方服务的数字桥梁&#xff0c;其选择直接影响系统稳定性、数据安全性和业务扩展性。我曾参与过多个跨境电商平台的API集成项目&#xff0c;深刻体会到选型失误可能导致日均百万级的订单处理延迟。以下是经过实…

作者头像 李华
网站建设 2026/8/6 21:57:21

PushPin高级玩法:自定义软木板背景、创建子看板与内容分类技巧

PushPin高级玩法&#xff1a;自定义软木板背景、创建子看板与内容分类技巧 【免费下载链接】pushpin A collaborative corkboard app 项目地址: https://gitcode.com/gh_mirrors/push/pushpin PushPin是一款协作式软木板应用&#xff0c;让团队协作和项目管理变得直观而…

作者头像 李华
网站建设 2026/8/6 21:51:13

CivitAI平台微服务架构部署实践与优化

CivitAI平台微服务架构部署实践与优化 【免费下载链接】civitai A repository of models, textual inversions, and more 项目地址: https://gitcode.com/GitHub_Trending/ci/civitai CivitAI是一个专注于AI模型、文本反转和创意资源分享的开源平台&#xff0c;采用现代…

作者头像 李华
网站建设 2026/8/6 21:50:52

WorkBuddy智能工作台:20分钟快速上手,提升开发与办公效率

1. 背景与核心概念在当今快节奏的软件开发和技术工作中&#xff0c;我们常常需要处理大量重复性任务、快速查询信息、生成代码片段或进行数据转换。传统的工作流往往需要在多个工具和浏览器标签页之间频繁切换&#xff0c;导致效率低下&#xff0c;注意力分散。WorkBuddy 正是为…

作者头像 李华
网站建设 2026/8/6 21:48:36

企业微信客服机器人:如何利用API实现全天候智能自动回复

公司做业务时&#xff0c;客服部门每天总会收到大量重复率极高的问题&#xff0c;比如“怎么退款”、“发什么快递”、“营业时间是几点”。如果全靠人工去回复&#xff0c;不仅效率低下&#xff0c;员工也容易产生职业疲劳。今天我们来详细拆解如何利用企业微信的“客服 API”…

作者头像 李华