python正则表达式中group

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

  用于匹配括号内的任何正则表达式,并且指明组的开始和结束位置;可以在执行匹配之后检索组中的内容,并且可以在可以在字符串中使用\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 re

if __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')
  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值