• python学习之re (?P...)通过关键字获取组以及( P=name)


    和其他的RE表达式一样,但是匹配的子串可以通过group的名字 name来获取。即  result.group('name')  (提示,字符串数字都是常量,所以关键字都可以被视为整型(hash结果))。组名必须是合法的python标识符(即满足python的变量定义规则),每一个组名在RE表达式中有且只能被定义一次。这样特殊的组仍然被定义了序号,就像没有命名的组一样(可以通过 umber的形式进行访问),在命名的组可以通过三种方式进行引用。如果RE表达式是(?P<quote>['"]).*?(?P=quote) (匹配字符串一个或两个引用) 

    回溯引用组,它匹配之前组所匹配的任意字符,并且查找匹配组名为 name的内容,不匹配会抛出异常。

    import re
     
    string1 = "<span>hello world</span>"
    rs = re.match("(?P<span_contexts><span>(.*?)</span>)",string1)
    print("group0",rs.group(0))
    print("group1",rs.group(1))
    print("group2",rs.group(2))
    print(rs.group("span_contexts"))

    输出

    group0 <span>hello world</span>
    group1 <span>hello world</span>
    group2 hello world
    <span>hello world</span>

    通过上面的例子我们可以看出在组里面可以嵌套组,组的标记序号以左括号为准,从左到右依次增加

    然后我们就匹配除了value helloworld

    同时我们也可以通过print(rs.group("span_contexts"))来访问我们匹配到的数据但是前后的数据必须是一致的。

    案例二

    import re
     
    string1 = "<span>hello world</span>hello world"
    rs = re.match("<span>(?P<span_contexts>.*?)</span>(?P=span_contexts)",string1)
    print(rs)
    print("group0",rs.group(0))
    print("group1",rs.group(1))
    # print("group2",rs.group(2))
    print(rs.group("span_contexts"))

    输出

    <re.Match object; span=(0, 35), match='<span>hello world</span>hello world'>
    group0 <span>hello world</span>hello world
    group1 hello world
    hello world

    通过案例输出

    第一行我们可以看出前面所匹配的内容必须前后一致(不一致会报错,在此不做演示)

    也表明了我们通过(?P=span_contexts)的方式可以引用成功 类比于 umber

    但是他不行成新的组,这点也类比于 umber,因为(?P=span_contexts)所代表的含义是,

    我这一块内容和前面某个组的内容是一样的,所以没有在此创建组的意义。

  • 相关阅读:
    FineBI与power BI,一个是国外风生水起的微软巨头,一个是方兴未艾的国产BI厂商领导者
    Linux下的crontab定时执行任务命令详解举例
    手把手教你搭建SSH框架(Eclipse版)
    一、连接池的定义
    centos安装sftp服务win搭建 sftp 服务器
    前往阿里云的企业优惠活动页面
    世界可能是思想最为混乱的时候,无论你说什么
    python面向对象编程class1
    Python 文件I/O 文件读写模式r,r+,w,w+,a,a+的区别
    Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都在那里
  • 原文地址:https://www.cnblogs.com/jinan1/p/10783427.html
Copyright © 2020-2023  润新知