Python分组与捕获用法详解_复杂模式匹配解析【教学】

admin 百科 12
Python正则分组核心是用()定义可提取、复用、命名的子表达式,包括基础捕获组、非捕获组(?:...)、反向引用\1、命名组(?P...)及嵌套组合,支撑文本解析与高级替换。

Python分组与捕获用法详解_复杂模式匹配解析【教学】-第1张图片-佛山资讯网

Python 中的正则表达式分组与捕获,核心在于用圆括号 () 定义子表达式,让匹配结果可提取、可复用、可命名。它不只是“把内容括起来”,而是控制匹配逻辑、组织返回结构、支撑高级替换的关键机制。

基础分组:用括号提取关键片段

默认情况下,每个 () 构成一个捕获组,re.searchre.findall 会按组顺序返回匹配内容。

  • re.search(r'(\d{4})-(\d{2})-(\d{2})', '2023-12-25') 返回三个组:'2023''12''25'
  • re.findall(r'(\w+)=(\d+)', 'a=1,b=2,c=3') 返回列表:[('a','1'), ('b','2'), ('c','3')],每项是元组
  • 非捕获组 (?:...) 不保存结果,只用于逻辑分组,比如 r'(?:https?://)?(\w+\.\w+)' 只捕获域名

反向引用:在模式中复用已捕获内容

\1\2 等引用前面第 n 个捕获组的**实际匹配文本**,常用于检测重复、配对或格式一致性。

  • r'(\w+)\s+\1' 匹配连续两个相同单词,如 'hello hello'
  • r'(.*?)\1>' 匹配成对 HTML 标签(不推荐解析 HTML,仅作示例),\1 确保闭合标签与开头一致
  • 注意:反向引用匹配的是“文本”,不是模式;若组未参与匹配(如含 ? 且未出现),引用可能失效

命名捕获组:用名字代替数字,提升可读性与维护性

写成 (?P<name>...)</name>,后续可用 match.group('name')match.groupdict() 获取,避免数序号出错。

标签: python html 正则表达式 工具

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~