美文网首页
3.3.4 非捕获型分组

3.3.4 非捕获型分组

作者: 马小跳_ | 来源:发表于2018-12-18 20:36 被阅读5次

目前为止,总共介绍了括号的三种用途:

  • 分组:将相关的元素归拢到一起,构成单个元素;
  • 多选结构:规定可能出现的多个子表达式;
  • 引用分组:将子表达式匹配的文本存储起来,供之后引用

这三种用途并不是彼此独立的,而是相互重叠的:

  • 单纯的分组可以视为“只包含一个多选分支的多选结构”;
  • 整个多选结构也会被视为单个元素,可以由一个量词限定;
  • 只要出现了括号,正则表达式在匹配时就会把括号内的子表达式存储起来提供引用;

但有时如果不需要引用,保存括号分组的引用信息就会影响性能;如果表达式比较复杂,要处理的文本又很多,更可能严重影响性能。

为了解决这种问题,正则表达式提供了非捕获分组(non-capturing group)。非捕获分组类似普通捕获分组,只是在开括号后面紧跟一个问号和冒号(?:...),这样的括号叫做非捕获型括号,它只能限定量词的作用范围,不能捕获文本。在引用分组时,分组的编号同样会按开括号出现的顺序从左向右递增,只是必须以捕获分组为准,非捕获分组会略过。

例3-35 非捕获型分组的使用

# 非捕获型分组
print(re.search(r'(\d{4})-(\d{2})-(\d{2})', '2018-12-20').group(1))  # 2018
print(re.search(r'(?:\d{4})-(\d{2})-(\d{2})', '2018-12-20').group(1))  # 12

非捕获型分组不需要保存匹配的文本,整个表达式的效率也因此提高,但是看起来不如捕获分组美观。不过,如果只需要使用括号的分组或者读选结构的功能,而没有用到引用分组,则应当尽量使用非捕获型括号。

相关文章

  • 3.3.4 非捕获型分组

    目前为止,总共介绍了括号的三种用途: 分组:将相关的元素归拢到一起,构成单个元素; 多选结构:规定可能出现的多个子...

  • 正则捕获组

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

  • 常用正则表达式

    基本的规则 [exp] 匹配中括号里的内容 (exp)捕获分组 (?:exp)非捕获分组 环视功能 (?=exp)...

  • 正则表达式中贪心与非贪心、非捕获分组、匹配先前文本的笔记

    非捕获分组(.NET、Java、JavaScript、PCRE、Perl、Python、Ruby) 由三个字条<(...

  • javascript正则表达式----分组捕获

    正则的分组捕获 简单的分组捕获之前在写身份证号正则(不完整)的时候,提到过分组捕获 分组多次捕获假设有这种需求: ...

  • 正则表达式中?=和?:和?!的理解

    要理解?=和?!,首先需要理解前瞻,后顾,负前瞻,负后顾四个概念: 举例: 要理解?:则需要理解捕获分组和非捕获分...

  • 正则:分组

    正则分组作用: 1、改变优先级:2、分组引用 3、分组捕获:正则在捕获的时候,不仅把大正则匹配的内容捕获到,而且还...

  • JS正则表达式的骚操作

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

  • 正则表达式捕获分组和非捕获分组及用法

    正则表达式 (regular expression)是一个描述字符模式的对象。 ECMAScript 的 RegE...

  • 正则-分组捕获

    分组改变x|y的默认优先级 分组引用\2代表和第二个分组出现一摸一样的内容;\1和第一个分组出现一摸一样的内容;这...

网友评论

      本文标题:3.3.4 非捕获型分组

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