美文网首页
第三章 括号

第三章 括号

作者: 马小跳_ | 来源:发表于2018-12-13 20:40 被阅读6次

    3.1 分组

    括号可以把有联系的多个元素归拢起来,使它们作为一个整体,可以由量词来约束。(一起出现或不出现, 或者出现n次)

    3.2 多选结构

      多选结构的形式是(...|...),在括号内部用竖线|分隔开多个子表达式,这些子表达式也叫做多选分支(option)。在匹配时,整个多选结构就视为一个元素,只要其中某个子表达式能够匹配,整个多选结构就匹配成功。多个子表达式之间是或的关系。

    3.3 引用分组

      括号不仅仅能把有联系的元素归拢起来并分组,还有其他的作用——使用括号后,正则表达式会保存每个分组真正匹配的文本,等到匹配完成后,通过group(num)之类的方法“引用”分组在匹配时捕获的内容。其中num表示对应括号的编号,括号分组的编号是从左向右计数,从1开始。因为“捕获”了文本,所以这种功能叫做捕获分组(capturing group)。对应的,这种括号叫做捕获型括号

    3.3.1 反向引用

    英文中不少单词中都有重叠出现的字母,比如shoot或beep,如果希望检查某个单词是否包含重叠出现的字母,该怎么解决?

    3.3.2 各种引用的记法

    根据前面的介绍,对分组的引用可能出现在三种场合:

    • 在匹配完之后,用group(num)之类的方法提取数据
    • 在进行正则表达式替换时,用\num引用
    • 在正则表达式内部,用\num引用

    3.3.3 命名分组

    捕获分组通常用数字编号来标识,但这样有几个问题:

    1. 数字编号不够直观,虽然规则是“从左到右按照开括号出现的顺序计数”,但括号多了难免混淆
    2. 引用时不够方便,有可能出现二义性

    未解决这类问题,一些语言和工具提供了命名分组(named grouping),可已经它看作另一种捕获分组,但是标识是容易记忆和辨别的名字,而不是数字编号。

    3.3.4 非捕获型分组

    补充

    • 元字符的转义

    • URL Rewrite

    • 捕获分组的个数不能是动态变化的——单个正则表达式里有多少个捕获分组,一次匹配成功后,结果中就必然存在多少个对应的元素(捕获分组匹配的文本),如果不能预先规定匹配结果中元素的个数,就不能使用捕获分组。

      print(re.findall(r'(\w+\.?)+', 'aaa.bbb.ccc'))  # ['ccc']
      print(re.findall(r'\w+\.?', 'aaa.bbb.ccc'))  # ['aaa.', 'bbb.', 'ccc']
      

    相关文章

      网友评论

          本文标题:第三章 括号

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