捕获组

作者: 部落大圣 | 来源:发表于2018-10-10 17:50 被阅读25次

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

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>...),其中name是组的名称,...是要匹配的表达式。它们的行为与正常组完全相同。除了可以通过索引访问还可以通过group(name)方式访问它们。

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

import re 

pattern = r"(?P<first>abc)(?: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

相关文章

  • 捕获组

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

  • 正则捕获组

    分组类型 有四种分组类型 捕获型() 非捕获型(?:) 正向前瞻型(?=) 反向前瞻型(?!) 捕获型 分组下面的...

  • Perl学习笔记10——正则表达式(下)

    捕获组与反向引用 在正则表达式中,圆括号的一大作用是进行模式分组,而其还有另一个非常重要的作用,即定义捕获组。捕获...

  • JS正则表达式的骚操作

    参考资料 《JS正则表达式的分组匹配》《正则表达式之捕获组/非捕获组介绍》《正则表达式中(?:pattern)、(...

  • 正则表达式的捕获组和非捕获组

    如果使用正则表达式的findall操作,在正则匹配规则中如果使用了捕获组,则并不会返回全组结果,而只是返回捕获组的...

  • 2018-09-23 WES流程文件解读1

    wes定义: 全外显子组测序,是利用目标序列捕获技术, 将全基因组编码基因外显子区域的DNA捕获并富集后,进行高通...

  • 正则的捕获组

    如上代码意思为找到'or'字符串,$1为匹配处的前两位字符,$2为匹配处的后1位字符 input属性返回原始字符串...

  • 正则表达式之捕获组

    1、概述 1.1什么是捕获组 捕获组就是把正则表达式中子表达式匹配的内容,保存到内存中以数字编号或显式命名的组里,...

  • 【Java基础】正则表达式的重难点分析

    源代码:https://gitee.com/AgentXiao/RegularExpression 一、捕获组和非...

  • 正则表达式

    语法 java.util.regex Pattern 判断是否匹配 Matcher 捕获组 示例:

网友评论

      本文标题:捕获组

      本文链接:https://www.haomeiwen.com/subject/rspyaftx.html