捕获组

可以通过用括号包围正则表达式的部分来创建组,意味着一个组可以作为元字符(例如*或?)的参数。

import re

pattern = r"egg(spam)*"

if re.match(pattern, "egg"):
   print(" Match 1")

if re.match(pattern, "eggspamspamspamegg"):
   print(" Match 2 ")

if re.match(pattern, "spam"):
   print(" Match 3 ")
........................................................................
Match 1
Match 2

上面例子(spam)表示捕获组

可以使用group函数访问捕获组中组的内容。group(0)或group()返回全部匹配,group(n)调用n大于0返回第n组匹配。group()返回一个包含所有捕获组的元组。

import re

pattern = r"a(bc)(de)(f(g)h)i"

match = re.match(pattern, "abcdefghijklmnop")

if match:
    print(match.group())
    print(match.group(0))
    print(match.group(1))
    print(match.group(2))
    print(match.groups())
................................................................................
abcdefghi
abcdefghi
bc
de
('bc', 'de', 'fgh', 'g')

捕获组同时可以嵌套,也就是说一个组可以是另一个组的子集

有一些特殊的捕获组,它们叫非捕获组和命名捕获组。

命名捕获组的格式是(?P...),其中name是组的名称,...是要匹配的表达式。它们的行为与正常组完全相同。除了可以通过索引访问还可以通过group(name)方式访问它们。

非捕获组的格式是(?:....)。非捕获组值匹配结果,但不捕获结果,也不会分配组号,当然也不能在表达式和程序中做进一步处理。

import re 

pattern = r"(?Pabc)(?:def)(ghi)"
match = re.match(pattern, "abcdefghi")
if match:
    print(match.group("first"))  #  命名捕获组
    print(match.groups())   # 非捕获组则不捕获结果
..........................................................................
abc
('abc', 'ghi')

元字符 |

|元字符,匹配或的意思。例如red|blue表示匹配red或者blue

import re

pattern = r"gr(a|e)y"

match = re.match(pattern , "gray")
if match:
    print(" Match 1")
match = re.match(pattern, "grey")
if match:
    print(" Match 2")
match = re.match(pattern, "griy")
if match:
    print(" Match 3")
..................................................................................................
Match 1
Match  2

你可能感兴趣的:(捕获组)