正则表达式入门

正则表达式入门

2026年9月19日·#编程学习/python学习笔记Python/正则表达式·1011 字 5 分钟
浏览量加载中...
AI 摘要

正则表达式是什么、r 前缀的作用,以及 re 模块的三个函数 match / search / findall 与 Match 对象

正则表达式是什么#

正则表达式(Regular Expression)是一种用特定语法规则组成的字符串模式,用来描述、匹配或替换文本中符合某种规则的字符序列。

可以理解为:专门用于文本处理的”高级查找和匹配公式”。

比如”匹配一个手机号”的规则就是 1[3-9]\d{9}——1 开头、第二位是 3-9、后面再跟 9 个数字。

re 模块的三个函数#

import re
s = "我的手机号是18809091231你记住了吗? 我的另一个手机号是18800001266,QQ号是1779989922你记住了吗?"
# match - 从字符串的开头开始匹配(返回 Match 对象)
result = re.match(r"1[3-9]\d{9}", s)
print(result) # s 以"我"开头,不是手机号 → None
# search - 从任意位置开始, 搜索第一个匹配项(返回 Match 对象)
result = re.search(r"1[3-9]\d{9}", s)
print(result.group()) # 18809091231
# findall - 从任意位置开始, 搜索所有匹配项(返回 list)
result = re.findall(r"1[3-9]\d{9}", s)
print(result) # ['18809091231', '18800001266']
函数从哪里找找到几个返回
re.match(规则, 文本)只从开头匹配第 1 个Match 对象(匹配不到是 None)
re.search(规则, 文本)任意位置第 1 个Match 对象
re.findall(规则, 文本)任意位置所有列表

Match 对象的常用方法#

result = re.search(r"1[3-9]\d{9}", s)
result.group() # 匹配到的结果:'18809091231'
result.span() # 匹配项的索引区间:(6, 17)
result.start() # 开始索引
result.end() # 结束索引

字符串前面的 r 是什么#

re.findall(r"1[3-9]\d{9}", s)

r 表示当前字符串中的转义字符无效,按普通字符串使用。正则表达式里大量使用 \d\w 这类反斜杠,加 r 可以避免转义歧义——写正则统一加 r

相关#

练习题#

一、回忆填空(写完再展开对答案)#

  1. 正则表达式是一种用特定语法规则组成的____,用来描述、匹配或替换文本中符合规则的字符序列
  2. 三个函数按”从哪里找”区分:match 从 ____ 开始;search 从任意位置找第 ____ 个;findall 找 ____
  3. matchsearch 返回 ____ 对象;findall 返回 ____
  4. Match 对象取匹配结果用 ____,取索引区间用 ____
  5. 字符串前的 r 表示 ____,写正则时统一要加
  6. 匹配手机号的规则 1[3-9]\d{9} 的含义:____ 开头、第二位是 ____、后面跟 9 个 ____
填空答案(做完再点开)
  1. 字符串模式 2. 字符串开头 / 1 / 所有 3. Match / 列表 4. group() / span() 5. 转义字符无效(按普通字符串使用) 6. 1 / 3-9 / 数字

二、裸写题#

文本:s = "我的手机号是18809090000, 另一个手机号是18800008888,QQ号是155998992 和 18809091293821"

  • 2-1 match 与 search 的区别 分别用 re.matchre.search1[3-9]\d{9} 找手机号,打印结果,解释为什么一个有值一个没值。

    提示(先自己想,实在想不出再点开)

    一级 · 思路:两个函数的”起点”不同 二级 · 方法re.match(规则, 文本) / re.search(规则, 文本) 三级 · 骨架print(re.match(r"1[3-9]\d{9}", s))

  • 2-2 找出所有手机号 用一个函数把文本里所有 11 位手机号都找出来(QQ 号 155998992 只有 9 位、长串不是 1 开头第二位 3-9,都不会被匹配)。

    提示

    一级 · 思路:要”全部”,用三个函数里的哪一个? 二级 · 方法re.findall(r"1[3-9]\d{9}", s) 三级 · 骨架print(re.____(r"1[3-9]\d{9}", s))

  • 2-3 找出位置 用 search 找到第一个手机号后,打印它的内容、起点索引和结束索引。

    提示

    一级 · 思路:Match 对象上有三个现成方法 二级 · 方法group() / start() / end() 三级 · 骨架print(result.____(), result.____(), result.____())

参考答案(做完再点开)
import re
s = "我的手机号是18809090000, 另一个手机号是18800008888,QQ号是155998992 和 18809091293821"
# 2-1:match 从开头匹配,s 以"我"开头 → None;search 任意位置 → 找到
print(re.match(r"1[3-9]\d{9}", s)) # None
print(re.search(r"1[3-9]\d{9}", s).group()) # 18809090000
# 2-2
print(re.findall(r"1[3-9]\d{9}", s)) # ['18809090000', '18800008888']
# QQ 号 155998992 不是 1 开头第二位 3-9 且共 11 位,所以不会被匹配
# 2-3
result = re.search(r"1[3-9]\d{9}", s)
print(result.group(), result.start(), result.end())

评论区

[ 标签 ]
# AI37# AI 编程2# AI工具1# Ajax2# Apifox1# AstrBot3# Astro2# CC Switch1# CDN2# Claude Code1# claudecode2# ClaudeCode1# Cloudflare2# CloudFlare2# CloudFlare-ImgBed3# coc3# CSS6# DeepSeek6# deepseek2# DELETE1# Docker1# EdgeOne3# Gist1# git1# GitHub1# hexo-circle-of-friends1# HTML6# HTTP5# ImageManager1# Java23# java13# JavaScript5# JDBC3# JSON2# JUnit1# LangChain25# Logback1# Maven6# Muse Spark1# Mybatis1# MyBatis4# MySQL28# MySql1# NapCat1# Node.js1# obsidian2# Obsidian5# OpenCode4# ORM1# PathVariable1# PicGo1# PyCharm1# Python65# RequestBody1# RequestMapping1# RESTful风格1# skills1# Slf4j1# SpringBoot11# SQL2# Streamlit5# Svelte2# TailwindCSS1# Telegram3# Tlias2# Vercel1# vscode2# Vue7# Waline3# WebDAV1# Web基础6# Web开发6# WinSCP1# YAML1# 三层架构1# 中二宣言1# 书籍1# 使用文档10# 写作1# 函数2# 刷步数1# 前端32# 动态1# 动漫1# 包1# 单词2# 博客7# 博客工作流1# 博客开发2# 参数接收1# 友链1# 反思2# 图床6# 地图1# 备份2# 大模型1# 奇思妙想1# 存储1# 学习方法6# 学校1# 宝塔面板3# 宝宝10# 对象1# 导航栏1# 工具2# 开发1# 开发工具1# 开发规范1# 开心1# 异常处理1# 影视2# 微信1# 性能优化2# 总结1# 想法15# 感受1# 感悟11# 指南1# 提示词工程1# 插件5# 故障排除1# 效率工具2# 教程10# 数据分析9# 数据库27# 数据结构1# 文件操作2# 斩神1# 日常92# 日志框架1# 朋友圈1# 朱元璋1# 模块1# 模板1# 正则表达式2# 测试1# 游戏2# 爬虫7# 生活迁移1# 电影2# 电脑1# 碎碎念1# 视觉识别1# 类1# 类型注解1# 网络基础2# 网络教室1# 羊毛2# 脚本2# 脚本工具1# 自动化2# 蓝奏云1# 订阅推荐2# 记录2# 评论系统1# 词根1# 词缀1# 说说1# 足迹1# 跑步2# 路径参数1# 转载2# 运动1# 部落冲突1# 配置1# 随机图1# 面向对象5# 音乐3# 音标1# 饮食1# 驼峰命名1# 高德地图1
[ 公告 ]

如果你喜欢,那么欢迎来到我的世界!

了解更多
[ 音乐 ]
封面

音乐

暂未播放

0:000:00
暂无歌词
找不到相关结果。
[ contents ]
[ 全部文章 ]