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

初识Python正则表达式:从0到1的语法入门

正则表达式是处理字符串的“瑞士军刀”,在Python中借助re模块,能高效完成匹配、查找、替换等操作。本文将拆解正则表达式的核心语法,搭配Python代码示例,帮你快速上手。


📝 基础匹配规则:精准定位目标字符串

正则表达式的核心是“模式匹配”,先从最基础的语法开始:

  • 普通字符:直接匹配自身,比如"hello"会精准匹配字符串中的"hello"
  • 特殊元字符:具有特殊含义的字符,是正则的核心
    • .:匹配任意单个字符(除了换行符\n
    • ^:匹配字符串的开头,比如^abc只会匹配以"abc"开头的字符串
    • $:匹配字符串的结尾,比如xyz$只会匹配以"xyz"结尾的字符串
    • *:匹配前面的字符0次或多次,比如ab*可以匹配"a"、"ab"、"abb"等
    • +:匹配前面的字符1次或多次,比如ab+可以匹配"ab"、"abb",但不匹配"a"
    • ?:匹配前面的字符0次或1次,比如ab?可以匹配"a"、"ab"

Python代码示例

Python

复制

import re # 匹配以"py"开头的字符串 pattern = r"^py" result = re.match(pattern, "python") print(result.group()) # 输出: py # 匹配以"on"结尾的字符串 pattern = r"on$" result = re.search(pattern, "python") print(result.group()) # 输出: on


🎯 字符集与转义:灵活匹配特定范围

当需要匹配某一类字符时,字符集和转义符能派上用场:

  • 字符集[]:匹配括号内的任意一个字符
    • [abc]:匹配"a"、"b"或"c"
    • [a-z]:匹配任意小写字母
    • [0-9]:匹配任意数字,等价于\d
    • [^abc]:匹配除了"a"、"b"、"c"之外的任意字符
  • 预定义字符集:简化常见的匹配场景
    • \d:匹配数字,等价于[0-9]
    • \D:匹配非数字,等价于[^0-9]
    • \w:匹配字母、数字或下划线,等价于[a-zA-Z0-9_]
    • \W:匹配非字母、数字或下划线
    • \s:匹配任意空白字符(空格、制表符、换行符等)
    • \S:匹配非空白字符
  • 转义字符\:当需要匹配元字符本身时,用反斜杠转义,比如匹配"."需要写成\.

Python代码示例

Python

复制

# 匹配手机号(11位数字) pattern = r"1\d{10}" result = re.match(pattern, "13812345678") print(result.group()) # 输出: 13812345678 # 匹配邮箱地址 pattern = r"\w+@\w+\.\w+" result = re.match(pattern, "test@example.com") print(result.group()) # 输出: test@example.com


📦 分组与捕获:提取目标子字符串

通过括号()可以将正则表达式分组,方便提取特定部分:

  • 分组匹配:用()包裹需要捕获的部分,匹配后通过group()方法获取
    • (ab):将"ab"作为一个分组
    • (a|b):匹配"a"或"b",|表示“或”的关系
  • 非捕获分组(?:...),只匹配不捕获,节省内存
  • 反向引用:用\数字引用之前的分组,比如(\w)\1可以匹配"aa"、"bb"等重复字符

Python代码示例

Python

复制

# 提取身份证号中的出生日期 pattern = r"(\d{4})(\d{2})(\d{2})" result = re.search(pattern, "110101199001011234") print(f"出生日期: {result.group(1)}年{result.group(2)}月{result.group(3)}日") # 输出: 出生日期: 1990年01月01日 # 匹配重复的字符 pattern = r"(\w)\1" result = re.findall(pattern, "aabbccddeeff") print(result) # 输出: ['a', 'b', 'c', 'd', 'e', 'f']


🔄 贪婪与非贪婪匹配:控制匹配范围

正则表达式默认是贪婪匹配,即尽可能匹配更多字符;在量词后加?可以开启非贪婪匹配:

  • 贪婪匹配a.*b会匹配从第一个"a"到最后一个"b"的所有字符
  • 非贪婪匹配a.*?b会匹配从第一个"a"到最近的"b"的字符

Python代码示例

Python

复制

# 贪婪匹配 pattern = r"a.*b" result = re.match(pattern, "aabab") print(result.group()) # 输出: aabab # 非贪婪匹配 pattern = r"a.*?b" result = re.match(pattern, "aabab") print(result.group()) # 输出: aab


🛠️ Python re模块核心函数

掌握正则语法后,搭配re模块的常用函数,就能解决实际问题:

  • re.match(pattern, string):从字符串开头匹配,只返回第一个匹配结果
  • re.search(pattern, string):扫描整个字符串,返回第一个匹配结果
  • re.findall(pattern, string):返回所有匹配的字符串列表
  • re.sub(pattern, repl, string):替换所有匹配的字符串
  • re.compile(pattern):编译正则表达式,提升多次匹配的效率

Python代码示例:源码网:https://svipm.com(描述:上千款各行各业的源码)

Python

复制

# 替换字符串中的所有数字 string = "abc123def456" result = re.sub(r"\d", "*", string) print(result) # 输出: abc***def*** # 编译正则表达式,提升匹配效率 pattern = re.compile(r"\w+") result = pattern.findall("hello world python") print(result) # 输出: ['hello', 'world', 'python']

http://www.jsqmd.com/news/541375/

相关文章:

  • ComfyUI模型管理完全指南:从零搭建高效AI创作流水线
  • PX4-Bootloader移植实战:从USB模拟串口到参数配置避坑指南
  • Petalinux-build --sdk卡在assimp?手动下载源码并集成到Yocto构建系统的完整指南
  • OpenClaw+QwQ-32B科研助手:文献摘要与笔记自动整理
  • Linux系统管理命令完全指南
  • 小丸工具箱 vR236|ffmpeg 图形化视频压制工具
  • Git提交时Personal Access Token权限不足:如何正确配置workflow scope
  • ViGEmBus虚拟手柄驱动:5分钟快速上手Windows游戏控制器终极方案
  • hongzh0Xstream历史漏洞审计
  • 2010–2023年中国村级行政区划边界矢量数据|含街道/乡/镇|SHP格式、WGS84坐标
  • 告别性能玄学:手把手教你用Perf和PEBS精准定位代码热点(附Skylake事件列表)
  • ROS Noetic + RealSense D435i:从驱动安装到RVIZ点云显示的完整工作流解析
  • ESP32驱动2.0寸TFT屏(带25Q32字库芯片)保姆级教程,解决UTF-8乱码问题
  • 在大厂技术岗工作十年,能挣公务员一辈子的钱吗?
  • 用SpringBoot+Jsoup爬取500彩票网双色球数据,手把手教你做个历史中奖查询小工具
  • Kylin V10 RPM依赖问题实战:从报错到解决的全流程解析
  • 第二章:Python3 之 列表与元组
  • 从“幻觉”到真实:3DGS渲染高光为何困难?浙大新论文Deferred Reflection给出了怎样的新思路?
  • MTK Camera HAL层实战:手把手教你调试imgsensor驱动(附常见问题排查)
  • SpringBoot项目里PostgreSQL主键冲突?别慌,教你三步搞定序列同步(附排查脚本)
  • 用Qt给rviz做皮肤:手把手教你开发ROS可视化插件(Noetic版)
  • 2026河北不锈钢外六角组应用白皮书医疗设备篇 - 优质品牌商家
  • OpenClaw邮件处理机:Qwen3-32B自动分类与重要通知提取
  • 2013–2025年中国水系分布数据集(基于OpenStreetMap)|河流·湖泊·水库·运河|全境覆盖、年度更新、SHP格式
  • Python爬虫避坑指南:用httpx和Crypto库破解有道翻译API的常见问题与解决方案
  • 3步精通StaMPS:雷达数据处理与地表形变监测工具实战指南
  • SEO_让流量持续增长的长期SEO策略指南
  • 嵌入式LCD双轨进度条库:基于自定义字符的轻量级实现
  • Oracle性能调优第一步:如何精准选择AWR报告的快照时间段?
  • EMQX 常见问题排查与优化指南