【七彩虹教育】python正则表达式精讲——分组
1. 什么是分组
分组是用圆括号“()”括起来的正则表达式,匹配出的内容就表示一个分组。使用分组,可以从目标字符串中提取出与圆括号内正则表达式相匹配的内容。
\D 是非数字字符,正则表达式里有两个分组,可以从目标字符串中提取出小时和分钟,程序输出结果为
2. 定义分组的3种形式
有3种形式的分组:
(exp) :把括号内的正则作为一个分组,系统自动分配组号,可以通过分组号引用该分组
(?P<name>exp) :定义一个命名分组,分组的正则是exp,系统为该分组分配分组号,可以通过分组名或分组号引用该分组
(?:exp) :定义一个不捕获分组,该分组只在当前位置匹配文本,在该分组之后,无法引用该分组,因为该分组没有分组名,没有分组号,也不会占用分组编号
在第1小节中,已经向你展示了第一种分组的形式,现在来看一个命名分组的例子
展开剩余73%2.1 命名分组
命名分组也使用圆括号,在正则表达式前面添加一个命名的步骤,以?P开头,在<>内填入分组的名称
使用了命名分组,就可以使用groupdict方法来获得match的结果,是一个字典
2.2 不捕获分组
使用不捕获分组,括号内的内容不会被捕获到
程序输出结果
正则表达式的确在目标字符串中找到了模式,因此group()返回的是匹配到的内容,尽管两个分组也匹配到了内容,但由于是使用的是不捕获分组,因此圆括号里的内容不会被捕获,groups()返回的是空元组。
根据前面3个例子,可以做出一张反应分组形式与获取结果方法之间的关系表
普通分组(exp)
命名分组(?Pexp)
不捕获分组 (?:exp)
group 返回匹配的内容 返回匹配的内容 返回匹配的内容
groups 以元组形式返回匹配到的分组内容 以元组形式返回匹配到的分组内容 空元组
groupdict 空字典 以字典形式返回匹配到的分组内容 空字典
3. 引用分组
引用分组的目的是对重复出现的文本进行匹配,这里极容易产生误解,理解成对重复的模式进行匹配,其实,是对重复的文本进行匹配。
3.1 分组编号
对于普通分组,正则表达式引擎会默认为它们分配一个编号,从1开始,在编写整个表达式时,后面的部分可以通过编号引用前面的分组
上面的例子中,只有一个分组(\d{1,2}),它的编号是1,在表达式的后半部分,使用\1 来复用分组1,你可能会以为,例子中的正则等价于
这样理解是错误的,如果你将时间改为“12点13分”, 上面的例子就无法正常运行了,原因在于引用分组是对重复出现的文本进行匹配,而不是对重复出现的模式进行匹配。虽然13可以匹配\d{1,2},但与分组1匹配到的12不相同,因此整个表达式不能匹配目标字符串。
3.2 分组命名
对于命名分组,没有分组编号,而是用分组的名字,命名分组的形式是(?P<name>exp), 在引用时,则使用(?P=name),和引用分组编号一样,它只能对重复的文本进行匹配,而不是对重复的模式进行匹配。
3.3 不捕获分组
对于不捕获分组,既没有分组编号,也没有分组名称,因此无法引用不捕获分组
发布于:湖南省