美文网首页
3.3.3 命名分组

3.3.3 命名分组

作者: 马小跳_ | 来源:发表于2018-12-17 20:52 被阅读8次

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

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

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

命名分组的记法并不复杂。在Python中是?P<name>来分组的,其中name是赋予这个分组的名字。使用时再用group(name)来获得对应分组匹配的文本。

例3-32 命名分组捕获

nameRegex = re.compile(r'(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})')
result = nameRegex.search('2018-12-17')
print(result.group('year'))  # 2018
print(result.group('month'))  # 12
print(result.group('day'))  # 17

因为数字编号分组的历史更长,为保证向后兼容,即便使用了命名分组,每个分组同时也具有数字编号,其编号规则没有变化。

例3-33 命名分组捕获时仍保留了数字编号

nameRegex = re.compile(r'(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})')
result = nameRegex.search('2018-12-17')
print(result.group('year'), result.group(1))  # 2018 2018
print(result.group('month'), result.group(2))  # 12 12
print(result.group('day'), result.group(3))  # 17 17

在Python中,如果使用了命名分组,在表达式中反向引用时,必须使用(?P=name)的记法;而要进行正则表达式替换,则需要写作\g<name>,其中的name是分组的名字。

例3-34 命名分组的引用方法

print(re.search(r'(?P<char>[a-z])(?P=char)', 'aa'))  # 'aa'
print(re.search(r'([a-z])(\1)', 'aa'))  # 'aa'

print(re.sub(r'(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})', '\g<day>_\g<month>_\g<year>', '2018-12-17'))  # 17_12_2018

相关文章

  • 3.3.3 命名分组

    捕获分组通常用数字编号来标识,但这样有几个问题: 数字编号不够直观,虽然规则是“从左到右按照开括号出现的顺序计数”...

  • ES9-正则扩展

    命名捕获分组 正向断言 反向断言

  • Django的路由系统

    基本格式 分组命名匹配 在Python的正则表达式中,分组命名正则表达式组的语法是(?Ppattern...

  • Lavarel5.1入门-路由

    路由命名 路由分组 参考 Laravel 5.1 基础教程

  • 十一,Geoserver命名空间(/namespace)

    命名空间是功能类型的唯一可标识分组。它由前缀和URI标识。 /namespaces Get: 查询所有命名空间列表...

  • ionic刷新报错 ——ionic serve 运行报错

    ionic serve 运行报错: 问题出在 ws v.3.3.3里,因为ws v.3.3.3不适应于最新的goo...

  • 正则平衡组

    ( #普通字符“(”( #分组构造,用来限定量词“”修饰范围(?() #命名捕获组,遇到...

  • 253常用控件命名规范与消息提示的完整用法

    一、控件的命名规范 Label 标签——》lbl GroupBox 分组框——》grp TextBox 文本框——...

  • 3.3.3常量

    1.什么是常量常量是指程序中持续不变的值,是值不能改变的数据,如整型常量123Java语言中常量的表示形式如下十进...

  • namespace

    命名空间是一个域,这在个域中所有的类型名字必须是唯一的,不同的类型分组归入到层次化的命名空间. 命名空间的好处是:...

网友评论

      本文标题:3.3.3 命名分组

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