python正则表达式中group

来源:互联网 发布:全民挂机 源码 编辑:程序博客网 时间:2024/05/17 00:54

(一)正则表达式中的(…)

  用于匹配括号内的任何正则表达式,并且指明组的开始和结束位置;可以在执行匹配之后检索组中的内容,并且可以在可以在字符串中使用\number来进行进一步的匹配,如下所述。当需要匹配字符’(‘或者’)’时,可以使用(和) ,或者[(]和[)]来实现。

  以上便是Python3.6官方文档对于(…)表达式的解说,该括号表达式用于定义一个group,一个正则表达式中可以有多个括号表达式,这就意味着匹配结果中可能有多个group,我们可以用group函数来定位到特定的group结果。

(二)match.group([group1,…])

  返回匹配结果中一个或多个group.如果该group函数仅仅有一个参数,那么结果就是单个字符串;如果有多个参数,结果是每一个参数对应的group项的元组.如果没有参数,那么参数group1默认为0(返回的结果就是整个匹配结果).如果参数值是0,那么返回整个匹配结果的字符串;如果它是[1..99]之间的数字,则返回的是与对应括号组匹配的字符串(第一节中已经解释了,正则表达式中的一个括号对应着一个group).如果组号为负或大于模式中定义的组数,则会引发IndexError异常。如果某个group包含在匹配模式中但没有找到相应的匹配,那么对应的结果就是None.如果一个group是匹配模式中的一部分,并且匹配到了多次,那么最后一次匹配结果将返回.

import re#定义了两个group,因为包含两个括号m = re.match("(\w+) (\w+)", "Isaac Newton, physicist")#group(0)就是匹配的整个结果print(m.group(0))                           #输出结果为Isaac Newton#group(1)是第一个group的值print(m.group(1))                           #输出结果为Isaac#group(2)是第二个group的值print(m.group(2))                           #输出结果为Newton#groups返回所有的group,以元组的形式print(m.groups())                           #输出结果为('Isaac','Newton')           

(三)findall(pattern, string, flag)

  返回字符串中模式的所有非重叠匹配,结果以一个字符串list返回.字符串匹配过程是从左到右开始扫描,并且匹配结果按顺序返回,如果该模式组存在一个或多个匹配,则返回匹配该组的一个列表;如果模式中有多个group,则返回的是一个元组的列表,元组中的元素依次对应各组的匹配结果.空的匹配包含在结果中除非它们开始了一个新的匹配过程。

  可以看出,findall实质上也是一个group的匹配过程.其结果就是groups匹配结果的列表.

import reif __name__ == '__main__':    #用于测试的字符串    str = "<h1>liuwei</h1><a href='www.baidu.com'></a><h1>zhangbin</h1><a href='www.love.com'></a>"    regex = re.compile("<h1>(.+?)</h1><a(.+?)></a>")      #定义了两个group,两个括号    res = regex.search(str)                               #search用于找到第一个满足匹配的子串,并返回                          print("group1:%s" %res.group(1))                      #输出结果为liuwei              print("group2:%s" %res.group(2))                      #输出结果为href='www.baidu.com'    res1 = regex.findall(str)                             #findall输出所有满足的匹配    print("res1:%s" %res1)    print(res1[0])                                        #输出结果为('liuwei', 'www.baidu.com')    print(res1[1])                                        #输出结果为('zhangbin, 'www.love.com')