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

在正则表达式中语法 (?P<名字>内容)

🎯 重点解释:?P<xxx> 是什么语法?

这一整段:

(?P<xxx>...)

是 Python 正则表达式中 “命名捕获组” 的语法。
咱们现在一个字一个字来解释:


(?...) 是干啥的?

这是一个捕获组,也叫“分组”,意思是:

我要提取括号里面的内容!

比如:

(\d+)

可以从字符串里提取数字,比如从 "年龄:28岁" 中提取出 "28"


?P<xxx> 是什么意思?

这就是 给这个捕获组起一个名字,叫 xxx

拆解:

  • ?:告诉正则引擎,“这是一个扩展语法(非普通分组)”。
  • P<xxx>:表示给当前这个组取个名,名叫 "xxx"

所以:

(?P<name>.+)

就表示:

我用括号 () 包了一段匹配规则(这里是 .+),
然后我给这段规则起了个名字"name"


✅ 为什么用 P?为什么写成 ?P<xxx>

这是 Python 独有的写法,全写法是:

(?P<名字>表达式)
  • P 是 Python 自己规定的标记(可以理解为 Python-style)
  • <xxx> 表示这个名字叫 xxx

它的意思是:

括号里的内容是一个命名分组,名字是 xxx

这是 Python 正则独有的语法。JavaScript、Java、Go 用的是别的写法(比如 (?<xxx>...))。


✅ 举例

📄 原始文本:

[客户] Alice Wang
[电话] 13900001111

📌 正则表达式:

\[客户]\s*(?P<name>.+)\n\[电话]\s*(?P<phone>\d+)

👆 里面有两个命名捕获组:

  • (?P<name>.+):抓 [客户] 后面的名字
  • (?P<phone>\d+):抓 [电话] 后面的数字

🧪 Python 提取代码:

import retext = "[客户] Alice Wang\n[电话] 13900001111"pattern = r"\[客户]\s*(?P<name>.+)\n\[电话]\s*(?P<phone>\d+)"match = re.search(pattern, text)if match:print("客户名:", match.group("name"))   # → Alice Wangprint("手机号:", match.group("phone"))  # → 13900001111

✅ 如果你不写 ?P<name> 会怎样?

那你只能用编号:

print(match.group(1))  # 拿第1个括号匹配到的内容
print(match.group(2))  # 拿第2个括号匹配到的内容

这种写法很容易搞混,不直观。


✅ 最终口诀

(?P<名字>表达式)

括号:提取内容
P<xxx>:给内容起个名字叫 xxx
→ 以后就可以用 match.group("xxx") 取出结果


✅ 对照表:命名捕获组 vs 普通捕获组

写法说明提取方式
(.+)普通分组match.group(1)
(?P<name>.+)命名分组match.group("name")

文章转载自:

http://fKxpy57G.rttxx.cn
http://1kGvmYcT.rttxx.cn
http://DjCSo8jJ.rttxx.cn
http://ArftejiH.rttxx.cn
http://U5jIKua3.rttxx.cn
http://eYlT64Ke.rttxx.cn
http://r1jzMVWP.rttxx.cn
http://54UltvmZ.rttxx.cn
http://xZHF9sxJ.rttxx.cn
http://uZOJahw6.rttxx.cn
http://wcuNkEKM.rttxx.cn
http://NyfvBp0Q.rttxx.cn
http://QBht2nrq.rttxx.cn
http://574ZlT9H.rttxx.cn
http://QoHqvfPk.rttxx.cn
http://744rwfT7.rttxx.cn
http://cn8SQhLa.rttxx.cn
http://KUbSa1nu.rttxx.cn
http://Wmh8mA9a.rttxx.cn
http://3FNs0Jdk.rttxx.cn
http://wcZKchZJ.rttxx.cn
http://9mcTny8M.rttxx.cn
http://cHpuIAjV.rttxx.cn
http://qJHQXrO8.rttxx.cn
http://epdvfxp8.rttxx.cn
http://OLs4vRhu.rttxx.cn
http://76U5E6R2.rttxx.cn
http://kZRWSMpM.rttxx.cn
http://T8lezrhR.rttxx.cn
http://K5VjwaXv.rttxx.cn
http://www.dtcms.com/a/247392.html

相关文章:

  • 2025.6.12 【校内 NOI 训练赛】记录(集训队互测选做)
  • 计算机视觉与深度学习 | 2024年至2025年图像匹配算法总结(原理,公式,代码,开源链接)
  • 如何将视频从 iPhone 传输到 HP 笔记本电脑
  • 2025年渗透测试面试题总结-字节跳动[实习]安全研发员(题目+回答)
  • 【QT系统相关】QT文件
  • 笔记本电脑安装win10哪个版本好_笔记本装win10专业版图文教程
  • 从 0 开始理解 Spring 的核心思想 —— IoC 和 DI(1)
  • 【论文解读】rStar:用互洽方法增强 SLM(小型语言模型) 推理能力
  • vue前端项目打包和部署
  • wireshark抓包过程
  • python可视化:从《歌手2025》到同类型节目全面解析
  • 机器学习中的数据准备关键技术
  • el-tree-select 多选树形下拉框,实现当选中时,根据当前选择的对象,动态生成表单数据。
  • 分布式爬虫系统设计与实现:跨节点MySQL存储方案
  • Vim、Nano 与 Emacs 的深度对比及嵌入式开发推荐
  • PHP语法基础篇(二):输出函数与字符串操作
  • uniapp-vue3-js-vite-pinia-eslint 快速开发模板
  • AKS升级路线最佳实践方案
  • 使用Amazon Elastic Beanstalk部署高考倒计时Flask应用:完整实践指南
  • 基于Python的热门微博数据可视化分析-Flask+Vue
  • 基于云计算的振动弦分析:谐波可视化与波动方程参数理解-AI云计算数值分析和代码验证
  • MyBatis原理
  • 【SAS求解多元回归方程】REG多元回归分析-多元二次回归
  • 【SAS逐步回归法】REG过程逐步回归求解最优方程
  • 42 C 语言随机数生成详解:rand/srand 使用技巧、随机数范围控制、真实场景应用
  • 达梦数据库(DM)用户名大小写处理规则
  • java 高并发设计
  • Node.js特训专栏-基础篇:2. JavaScript核心知识在Node.js中的应用
  • Python6.12打卡(day44)
  • JavaWeb(Servlet预习)