正则表达式 第三篇:分组匹配

通常情况下,分组是用一对圆括号“()”括起来的正则表达式,匹配出的内容就表示一个分组。分组有一个例外的情况,分组也可以不使用圆括号,而是使用 | 元字符来表示分组,| 的两侧是两个分组。

当使用圆括号表示分组时,从正则表达式的左边开始看,看到的第一个左括号“(”表示第一个分组,第二个"("表示第二个分组,依次类推,需要注意的是,有一个隐含的全局分组(就是0),就是整个正则表达式。默认情况下,正则表达式为每个分组自动分配一个组号,规则是:组号从1开始,从左向右,组号依次加1(base+1),例如,第一个分组的组号为1,第二个分组的组号为2,以此类推。

分组不仅有编号,还能为分组设置别名,在Python中,使用(?P<name>exp)为正则表达式exp设置别名。

匹配分组的元字符:

  • exp1 | exp2 :匹配exp1 或 exp2
  • (exp):把括号内的正则作为一个分组
  • (?P<name>exp):定义一个分组,并为分组起别名,分组的正则是exp
  • (?P=name):引用别名为name的分组
  • \num:使用分组的编号来引用分组,分组按照正则表达式中出现的顺序编号1、2、3、...

一,分组引用

分组引用,是指在表达式中,重复使用正则表达式,使正则表达式的写法更简洁。

分组定义的三种形式:

  • (exp) :自动分配组号,通过分组号引用该分组;
  • (?P<name>exp) :命名分组,通过分组名引用该分组;
  • (?:exp) :该分组只在当前位置匹配文本,在该分组之后,无法引用该分组,该分组没有分组名,也没有分组号;

1,通过组号引用分组

在正则表达式前面定义一个分组(exp),在表达式的后面,能够通过组号引用该分组的表达式,引用分组的语法是:\group_number;

例如:\b(\w+)\b\s+\1\b,在该正则表达式中,只存在一个分组(\w+),组号是1,在该分组的后面,使用\1来引用该分组,将\1替换为分组的子表达式,等价于:\b(\w+)\b\s+(\w+)\b

2,通过分组名引用分组

在正则表达式中,能够对分组命名,命名的分组格式:(?P<name>exp),分组名是name,通过name来引用该分组的格式是:(?p=group_name),通过分组名和组号引用分组,其文本匹配的行为是一样的。

例如:\b(?P<word>\w+)\b\s+(?P=word)\b,在该分组的后面中,使用(?P=word)引用该分组,把(?P=word)替换为分组的子表达式,等价于:\b(\w+)\b\s+(\w+)\b

3,无法引用的分组

(?:exp):使用这种语法定义的分组,不能引用,只能在当前的位置匹配文本,正则表达式不为该分组自动分配组号。

二,匹配分组的示例

下面使用Python的re模块来演示如何使用分组。

1,匹配任意分组

>>> out=re.match(‘[0-9]?\d$|100‘,‘08‘)
>>> out
<re.Match object; span=(0, 2), match=‘08‘>

2,使用()定义分组

>>> out=re.match(‘\w{4,20}@(163|qq|126)\.com‘,‘[email protected]‘)
>>> out
<re.Match object; span=(0, 11), match=‘[email protected]‘>

3,为分组命名,并通过别名来引用分组

>>> out=re.match(r"<(?P<name1>\w*)><(?P<name2>h[1-5])>.*</(?P=name2)></(?P=name1)>", "<html><h1>www.baidu.com</h1></html>")
>>> out
<re.Match object; span=(0, 35), match=‘<html><h1>www.baidu.com</h1></html>‘>

参考文档:

Python 正则表达式(匹配分组)

原文地址:https://www.cnblogs.com/ljhdo/p/10678281.html

时间: 2024-09-28 14:44:21

正则表达式 第三篇:分组匹配的相关文章

python成长之路第三篇(2)_正则表达式

打个广告欢迎加入linux,python资源分享群群号:478616847 目录: 1.什么是正则表达式,python中得正则简介 2.re模块的内容 3.小练习 一.什么是正则表达式(re) 正则表达式相信很多人都熟悉了,在python中正则表达式的支持是通过re(regular expression)模块,正则表达式是可以匹配文本片段的模式,简单的是正则表达式就是普通的字符串,可以处理字符串.也就是说正则表达式的存在就是来处理文本字符串的 下面来熟悉下正则中的几个概念: 1.通配符 通配符是

JavaScript正则表达式之分组匹配

语法 元字符:(pattern) 作用:用于反复匹配的分组 属性$1~$9 如果它(们)存在,用于得到对应分组中匹配到的子串 \1或$1 用于匹配第一个分组中的内容 \2或$2 用于匹配第一个分组中的内容 ... \9或$9 用于匹配第一个分组中的内容 用法示例 var reg = /(A+)((B|C|D)+)(E+)/gi;//该正则表达式有4个分组 //对应关系 //RegExp.$1 <-> (A+) //RegExp.$2 <-> ((B|C|D)+) //RegExp.

JS正则表达式的分组匹配

什么是分组 通俗来说,我理解的分组就是在正则表达式中用()包起来的内容代表了一个分组,像这样的: var reg = /(\d{2})/ reg.test('12'); //true 这里reg中的(/d{2})就表示一个分组,匹配两位数字 分组内容的的形式 一个分组中可以像上面这样有一个具体的表达式,这样可以优雅地表达一个重复的字符串 /hahaha/ /(ha){3}/ 这两个表达式是等效的,但有了分组之后可以更急简洁. 体格分组中还可以有多个候选表达式,例如 var reg = /I co

浅析正则表达式-应用篇

一.前言 时间匆匆流去,我已经来博客园快要两年了,在这里我学会了很多知识,博客园给我带来了知识上的充实和分享的快乐!我现在要分享的是关于正则表达式的一些使用方法,在次声明:必须有一定的正则表达式的基础,否则会有些吃力,如果你对基础不是很了解请翻到这章节: 浅析正则表达式-原理篇http://www.cnblogs.com/dwlsxj/p/Regex.html 浅析正则表达式-柳暗花明又一村篇 http://www.cnblogs.com/dwlsxj/p/Reg.html 通过上面两篇文章的讲

JavaScript中的正则表达式(终结篇)

JavaScript中的正则表达式(终结篇) 在之前的几篇文章中,我们了解了正则表达式的基本语法,但那些语法不是针对于某一个特定语言的.这篇博文我们将通过下面几个部分来了解正则表达式在JavaScript中的使用: JavaScript对正则表达式的支持程度 支持正则表达式的RegExp类型 RegExp的实例属性 RegExp的实例方法 RegExp的构造函数属性 简单的应用 第一部分:JavaScript对正则表达式的支持程度 之前我介绍了正则表达式的基本语法,如果大家不是很了解可以先看下面

JavaScript正则表达式(三)

正则表达式可以: •测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式.这称为数据有效性验证 •替换文本.可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字 •根据模式匹配从字符串中提取一个子字符串.可以用来在文本或输入字段中查找特定文字 正则表达式语法 一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式.该模式描述在查找文字主体时待匹配的一个或多个字符串

php正则表达式的三个最基本原则分享

我个人认为,正则表达式的常规用法可以分为如下三个最基本的原则:1.找谁.2.怎么找.3.找它干什么. 接下来,我分享一下一个正则表达式分三个部分: 原子字符 . 匹配除换行符以外的任意字符 \w 匹配一个字母或数字或下划线 \s 匹配一个空白符 \d 匹配一个数字 \b 匹配单词的开始或结束的位置(匹配一个位置) ^ 匹配字符串的开始 $ 匹配字符串的结束 表示范围 [] 匹配括号中的任意一个字符 量词 重复0次或更多次 重复1次或更多次 ? 重复0次或1次 {n} 重复n次 {n,} 重复n次

ELK统一日志管理平台第三篇-logstash grok插件的使用

1. ELK统一日志管理平台第三篇-logstash grok插件的使用   在本篇博文中,主要讲解如下几个知识点和实践经验,供大家参考:   1. 关于JAVA应用程序的日志内容标准规范:   2. 如何使用logstash的grok插件来完成message字段的拆分:   3. 定时删除Es的索引: 1. 关于JAVA应用程序的日志内容标准规范:   最近公司一直在主推ELK这个项目,而我是ELK这个项目的运维人员.所以针对ELK项目会有很多经验输出:由于我们公司的业务系统以JAVA语言开发

HttpApplication处理对象与HttpModule处理模块 (第三篇)

一.HttpApplication对象简述 在HttpRuntime创建了HttpContext对象之后,HttpRuntime将随后创建一个用于处理请求的对象,这个对象的类型为HttpApplication. HttpRuntime管理一个定义在System.Web命名空间下的HttpApplicationFactory类的时候,HttpApplicationFactory通过工厂模式管理HttpApplication对象.在HttpApplicationFactory内部维护了一个HttpA