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

(17)100天python从入门到拿捏《正则表达式》

正则表达式

正则表达式是 Python 文本处理中最强大的工具之一,它用于字符串的匹配、查找、替换、验证与提取

文章目录

  • 正则表达式
  • 一、正则表达式基础
    • 1.1 什么是正则表达式?
    • 1.2 在 Python 中使用正则模块 `re`
  • 二、常用正则表达式语法
    • 2.1 字符匹配基础
    • 2.2 重复次数匹配
    • 2.3 字符集与分组
    • 2.4 特殊转义字符
    • 2.5 常见模式修饰符flags
  • 三、常见案例
    • 3.1 案例1:判断手机号格式是否合法
    • 3.2 案例2:提取字符串中的数字
    • 3.3 案例3:验证邮箱格式
    • 3.4 案例4:替换字符串中的敏感词
    • 3.5 案例5:从HTML中提取超链接
    • 3.6 案例6:提取日期
    • 3.7 案例7:分割字符串(多个分隔符)
    • 3.8 案例8:使用 `re.compile()` 提升性能
    • 3.9 案例9:`finditer()` 获取位置索引
    • 3.10 案例10:匹配多行文本
  • 四、常见正则表达式实用模板

一、正则表达式基础

1.1 什么是正则表达式?

正则表达式是一种用来描述字符串匹配规则的模式语言
作用:

  • 判断字符串是否符合某种格式;
  • 提取字符串中符合条件的部分;
  • 替换匹配的内容;
  • 拆分字符串。

1.2 在 Python 中使用正则模块 re

Python 提供内置模块 re,当匹配成功时,会返回一个 Match 对象,否则返回None

常用函数如下

函数作用
re.match(pattern, string)字符串起始位置开始匹配
re.search(pattern, string)扫描整个字符串,返回第一个匹配项
re.findall(pattern, string)返回所有匹配结果列表
re.finditer(pattern, string)返回所有匹配结果的迭代器
re.sub(pattern, repl, string)替换匹配到的内容
re.split(pattern, string)按匹配分割字符串
re.compile(pattern)预编译正则表达式,提高效率

注意: match 和 search 是匹配一次 findall 匹配所有。

二、常用正则表达式语法

2.1 字符匹配基础

表达式含义说明
.匹配除换行符外任意字符a.b → “acb” ✅
^匹配字符串开头^Hello 匹配以 Hello 开头
$匹配字符串结尾world$ 匹配以 world 结尾
\d匹配数字(0–9)\d\d → “23” ✅
\D匹配非数字\D → “A” ✅
\w匹配字母数字下划线\w+ → “hello_123” ✅
\W匹配非字母数字下划线
\s匹配空白字符(空格、Tab、换行)
\S匹配非空白字符

使用原始字符串 r"pattern";模式元素(如 r’\t’,等价于 \t )匹配相应的特殊字符。

2.2 重复次数匹配

表达式含义说明
*重复0次或多次ab* → “a”, “abbb” ✅
+重复1次或多次ab+ → “ab”, “abbbb” ✅
?重复0次或1次ab? → “a”, “ab” ✅
{n}重复n次a{3} → “aaa” ✅
{n,}重复n次或以上a{2,} → “aa”, “aaaaa” ✅
{n,m}重复n到m次a{2,4} → “aa”, “aaa”, “aaaa” ✅

2.3 字符集与分组

表达式含义
[abc]匹配a或b或c中的任意一个
[^abc]匹配除a,b,c外的任意字符
(abc)分组匹配,捕获“abc”
(?:abc)非捕获分组,不保存内容
`ab`

2.4 特殊转义字符

表达式含义
\\匹配反斜杠
\n匹配换行符
\t匹配制表符

2.5 常见模式修饰符flags

修饰符说明
re.Ire.IGNORECASE忽略大小写
re.Mre.MULTILINE多行匹配(^ 和 $ 匹配每一行)
re.Sre.DOTALL. 匹配包括换行符在内的任意字符

三、常见案例

3.1 案例1:判断手机号格式是否合法

import retext = "138-9999-0000"
pattern = r"^1[3-9]\d{9}$"  # 中国大陆手机号print(bool(re.match(pattern, "13899990000")))  # ✅ True
print(bool(re.match(pattern, text)))            # ❌ False (因为中间有 '-')

3.2 案例2:提取字符串中的数字

import retext = "商品价格: 价格199元,优惠后149元"
numbers = re.findall(r"\d+", text)
print(numbers)  # ['199', '149']

3.3 案例3:验证邮箱格式

import reemail = "hello_world99@163.com"
pattern = r"^[\w.-]+@[\w.-]+\.\w+$"print(bool(re.match(pattern, email)))  # ✅ True

3.4 案例4:替换字符串中的敏感词

import retext = "这个人很垃圾"
clean_text = re.sub(r"垃圾", "**", text)
print(clean_text)  # 这个人很**

3.5 案例5:从HTML中提取超链接

import rehtml = '<a href="https://example.com">Example</a>'
pattern = r'href="(.*?)"'link = re.findall(pattern, html)
print(link)  # ['https://example.com']

3.6 案例6:提取日期

import retext = "会议时间:2025-10-12 10:30"
pattern = r"(\d{4})-(\d{2})-(\d{2})"match = re.search(pattern, text)
if match:print("年:", match.group(1))print("月:", match.group(2))print("日:", match.group(3))

3.7 案例7:分割字符串(多个分隔符)

import retext = "apple, banana; orange|grape"
fruits = re.split(r"[,;|]\s*", text)
print(fruits)  # ['apple', 'banana', 'orange', 'grape']

3.8 案例8:使用 re.compile() 提升性能

import repattern = re.compile(r"\d{3}-\d{3,8}")
texts = ["010-12345", "021-7654321", "0755-888888"]for t in texts:if pattern.match(t):print(f"匹配成功: {t}")

3.9 案例9:finditer() 获取位置索引

import retext = "Tom is 18, Jerry is 22"
pattern = r"\d+"for m in re.finditer(pattern, text):print(f"找到数字 {m.group()},位置: {m.span()}")

3.10 案例10:匹配多行文本

import retext = """Hello world
Python is great
Regex is powerful"""pattern = re.compile(r"^Python.*$", re.M)
print(re.findall(pattern, text))  # ['Python is great']

四、常见正则表达式实用模板

场景正则表达式
匹配邮箱^[\w.-]+@[\w.-]+\.\w+$
匹配手机号(中国大陆)^1[3-9]\d{9}$
匹配身份证号^\d{17}[\dXx]$
匹配网址https?://[^\s]+
匹配IPv4地址(?:\d{1,3}\.){3}\d{1,3}
匹配日期\d{4}-\d{2}-\d{2}
匹配HTML标签<[^>]+>
匹配中文字符[\u4e00-\u9fa5]+

python学习专栏导航
(1)100天python从入门到拿捏《Python 3简介》
(2)100天python从入门到拿捏《python应用前景》
(3)100天python从入门到拿捏《数据类型》
(4)100天python从入门到拿捏《运算符》
(5)100天python从入门到拿捏《流程控制语句》
(6)100天python从入门到拿捏《推导式》
(7)100天python从入门到拿捏《迭代器和生成器》
(8)100天python从入门到拿捏《函数和匿名函数》
(9)100天python从入门到拿捏《装饰器》
(10)100天python从入门到拿捏《Python中的数据结构与自定义数据结构》
(11)100天python从入门到拿捏《模块》
(12)100天python从入门到拿捏《文件操作》
(13)100天python从入门到拿捏《目录操作》
(14)100天python从入门到拿捏《Python的错误与异常机制》
(15)100天python从入门到拿捏《面向对象编程》
(16)100天python从入门到拿捏《标准库》

http://www.dtcms.com/a/474280.html

相关文章:

  • 【C++】深入理解list底层:list的模拟实现
  • 用Spring Cloud打造健壮服务:熔断与降级如何护航核心业务
  • 网站平台怎么推广企业的做网站
  • 机器学习-推荐系统(上)
  • 网站建设费用的财务核算三丰云服务器
  • 权威的建筑工程网站ui设计培训内容
  • 【Kafka】架构原理、消息丢失、重复消费、顺序消费、事务消息
  • 全栈开发指南:从前端到后端的全面掌握_前端开发
  • Vue-class 与 style 绑定
  • 批次量生成不同方向形变结构脚本
  • 广州论坛网站建设北京工商注册app下载
  • 河南省住房和建设厅网站首页旅游网页设计说明书
  • jmeter接口测试操作指引
  • 问答 WordPress六年级上册数学优化设计答案
  • WPF 绑定机制实现原理
  • xtuoj co-string
  • MySQL数据库的数据库和表的操作练习
  • 基于JETSON/RK3588机器人高动态双目视觉系统方案
  • 【完整源码+数据集+部署教程】 盲道图像分割损坏检测系统源码和数据集:改进yolo11-GhostHGNetV2
  • 山东网站建站系统平台如何将vs做的网站备份出来6
  • Python学习之路(7)— 在CentOS上安装Python 3.12
  • AT指令解析:TencentOS Tiny AT指令解析源码分析2-数据类型定义
  • 网站做三个月收录100管理系统中计算机应用
  • 【深度长文】AI+游戏方向调研报告
  • 百度网址大全网站手机网站改版了
  • wordpress外链包装中国临沂网站优化
  • 静态类型系统在前后端联调中的价值验证
  • 网站备案 怎么建站注册高级工程师
  • Linux:应用层协议HTTP
  • .Net Core上传组件7.2