码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-05-29 09:12:22      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:无法   shu   情况下   color   表达式   tar   http   re模块   位置   

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

当使用圆括号表示分组时,从正则表达式的左边开始看,看到的第一个左括号“(”表示第一个分组,第二个"("表示第二个分组,依次类推,需要注意的是,有一个隐含的全局分组(就是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,test@qq.com)
>>> out
<re.Match object; span=(0, 11), match=test@qq.com>

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 正则表达式(匹配分组)

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

标签:无法   shu   情况下   color   表达式   tar   http   re模块   位置   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!