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

【正则表达式】 正则表达式的分组和引用

🌈 个人主页:(时光煮雨)
🔥 高质量专栏:vulnhub靶机渗透测试
👈 希望得到您的订阅和支持~
💡 创作高质量博文(平均质量分95+),分享更多关于网络安全、Python领域的优质内容!(希望得到您的关注~)


🌵目录🌵

  • 前言
  • 🍱一、基本语法
  • 🍘二、分组类型
    • 🍙2.1. 捕获分组(Capturing Group)
    • 🍚2.2. 非捕获分组(Non-capturing Group)
    • 🍛2.3. 命名分组(Named Capturing Group)
  • 🍜三、分组引用
    • 🍝3.1. 反向引用(Backreference)
    • 🍠3.2. 命名反向引用
  • 🍢3.3. 替换引用
  • 🍣四、分组的高级应用
    • 🍤4.1. 条件匹配
    • 🍥4.2. 平衡组(高级特性)
  • 🥮五、常见问题与陷阱
  • 🍡六、练习挑战
  • 🥟七、总结要点
  • 🤝 期待与你共同进步
  • 📚 参考文档


前言

在正则表达式中,分组(Grouping)允许我们将多个字符视为一个整体单元,就像数学中的括号一样。分组主要有两个作用:

  1. 将多个字符作为一个整体:可以对这个整体应用量词(如 *、+、?、{n})
  2. 捕获匹配的内容:可以在后续引用或提取这部分匹配的内容

🍱一、基本语法

使用圆括号 () 来创建分组:

(表达式)

例如,(ab)+ 可以匹配 “ab”、“abab”、“ababab” 等,但不能匹配 “a” 或 “b”。


🍘二、分组类型

正则表达式中有几种不同类型的分组:

🍙2.1. 捕获分组(Capturing Group)

最常见的分组形式,会捕获匹配的内容并分配一个编号(从1开始)。

(\d{4})-(\d{2})-(\d{2})  # 匹配日期格式 YYYY-MM-DD

这个表达式会创建3个分组:

  • 分组1:4位数字的年份
  • 分组2:2位数字的月份
  • 分组3:2位数字的日期

🍚2.2. 非捕获分组(Non-capturing Group)

使用 (?:表达式) 语法,表示只分组但不捕获。

(?:Mr|Ms|Mrs)\. (\w+)  # 匹配 "Mr. Smith" 但只捕获 "Smith"

🍛2.3. 命名分组(Named Capturing Group)

为分组指定名称,提高可读性(不同语言语法可能不同)。

Python 示例:

(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})

JavaScript 示例:

(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})

🍜三、分组引用

分组最强大的功能之一是可以在正则表达式内部或外部引用已匹配的内容。

🍝3.1. 反向引用(Backreference)

在正则表达式内部引用前面的分组,使用 \数字 语法:

(\w+) \1  # 匹配重复的单词,如 "hello hello"

这个模式会匹配两个相同的单词,中间用空格分隔。

🍠3.2. 命名反向引用

对于命名分组,可以使用名称来引用:

(?P<word>\w+) (?P=word)  # Python 语法
\k<word>                 # JavaScript 语法

🍢3.3. 替换引用

在替换操作中引用分组内容:

Python 示例:

import re
text = "2023-05-15"
new_text = re.sub(r'(\d{4})-(\d{2})-(\d{2})', r'\2/\3/\1', text)
# 结果: "05/15/2023"

JavaScript 示例:

let text = "2023-05-15";
let newText = text.replace
http://www.xdnf.cn/news/1468063.html

相关文章:

  • Docker学习笔记(三):镜像与容器管理进阶操作
  • 解决“找不到 pip”
  • IAR借助在瑞萨RH850/U2A MCU MCAL支持,加速汽车软件开发
  • 多模联邦查询网关:ABP + Trino/Presto 聚合跨源数据
  • 【更新完毕】2025数学建模国赛E题思路代码文章高教社杯全国大学生数学建模-AI 辅助智能体测
  • 解密大语言模型推理:输入处理背后的数学与工程实践
  • 【论文阅读】FedsNet: the real‑time network for pedestrian detection based on RT‑DETR
  • 职场突围:我的转岗反思录
  • 【基础组件】手撕 MYSQL 连接池(C++ 版本)
  • MySQL InnoDB索引机制
  • Redis 的相关文件作用
  • 连锁门店可用性监测和进程监测最佳实践
  • 企业培训笔记:宠物信息管理--实现宠物信息的删除
  • 【MFC】对话框节点属性:Condition(条件)
  • python + Flask模块学习 2 接收用户请求并返回json数据
  • 智能工单路由系统(Java)
  • 小补充: IPv6 安全RA
  • 苹果 AI 探秘:代号 “AFM” —— “温柔的反叛者”
  • 案例精选 | 南京交通职业技术学院安全运营服务建设标杆
  • 【前端教程】JavaScript 实现爱好选择与全选/全不选功能
  • 硬件基础:串口通信
  • P1106 删数问题
  • 鼓励员工提出建议,激发参与感——制造企业软件应用升级的密钥
  • 02-Media-5-mp4demuxer.py 从MP4文件中提取视频和音频流的示例
  • 敏捷开发-Scrum(上)
  • 硬件(三) 通信方式、串口通信
  • K8S-Pod(上)
  • 2025国赛C题创新论文+代码可视化 NIPT 的时点选择与胎儿的异常判定
  • 与优秀者同行,“复制经验”是成功的最快捷径
  • CAD【xplode】和【explode】功能的区别