python正则表达式中group

1 正则表达式中的(…)

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

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

2 match.group([group1,…])

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

group和groups是两个不同的函数。
一般,m.group(N) 返回第N组括号匹配的字符。
m.group() == m.group(0) == 所有匹配的字符,与括号无关,这个是API规定的。m.groups() 返回所有括号匹配的字符,以tuple格式。
m.groups() == (m.group(1), m.group(2) ...)

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')           

3 findall(pattern, string, flag)

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

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

import re

if __name__ == '__main__':

    #用于测试的字符串
    str = "

liuwei

zhangbin

"
regex = re.compile("

(.+?)

"
) #定义了两个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')

转自:https://blog.csdn.net/jeryjeryjery/article/details/77196497

你可能感兴趣的:(python)