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

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

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

python学习之re (?P...)通过关键字获取组以及( P=name)的更多相关文章

  1. python 学习笔记 12 -- 写一个脚本获取城市天气信息

    近期在玩树莓派,前面写过一篇在树莓派上使用1602液晶显示屏,那么可以显示后最重要的就是显示什么的问题了. 最easy想到的就是显示时间啊,CPU利用率啊.IP地址之类的.那么我认为呢,假设可以显示当 ...

  2. Python 学习笔记:根据输入年月获取该月的第一天和最后一天

    目的: 给定一个时间,比如:2020.02,要求返回所输入月份的第一天及最后一天,比如:('2020.02.01', '2020.02.29') 参考博客:https://blog.csdn.net/ ...

  3. 20180821 Python学习笔记:如何获取当前程序路径

    20180821 Python学习笔记:如何获取当前程序路径 启动的脚本的路径为:D:\WORK\gitbase\ShenzhenHouseInfoCrawler\main.py 当前脚本的路径为:D ...

  4. python学习笔记系列----(八)python常用的标准库

    终于学到了python手册的最后一部分:常用标准库.这部分内容主要就是介绍了一些基础的常用的基础库,可以大概了解下,在以后真正使用的时候也能想起来再拿出来用. 8.1 操作系统接口模块:OS OS模块 ...

  5. python学习之路-day2-pyth基础2

    一.        模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,第三方库存放位置:site-packages sys模块简介 导入模块 import sys 3 sys模 ...

  6. Python 学习日记(第三周)

    知识回顾 在上一周的学习里,我学习了一些学习Python的基础知识下面先简短的回顾一些: 1Python的版本和和安装 Python的版本主要有2.x和3.x两个版本这两个版本在语法等方面有一定的区别 ...

  7. Python:Python学习总结

    Python:Python学习总结 背景 PHP的$和->让人输入的手疼(PHP确实非常简洁和强大,适合WEB编程),Ruby的#.@.@@也好不到哪里(OO人员最该学习的一门语言). Pyth ...

  8. Python学习的个人笔记(基础语法)

    Python学习的个人笔记 题外话: 我是一个大二的计算机系的学生,这份python学习个人笔记是趁寒假这一周在慕课网,w3cschool,还有借鉴了一些博客,资料整理出来的,用于自己方便的时候查阅, ...

  9. python学习之路基础篇(第四篇)

    一.课程内容回顾 1.python基础 2.基本数据类型  (str|list|dict|tuple) 3.将字符串“老男人”转换成utf-8 s = "老男人" ret = by ...

随机推荐

  1. asp.net获取当前请求的url

    asp.net获取当前请求的url 设当前页完整地址是:http://www.dgshop.com/Home/Manager?id=2&para=ASFDG [1]获取 完整url 代码如下: ...

  2. 【HTML+CSS】在书写代码时的便捷应用

    创建多个相同元素: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  3. (六)QDialog,QMessageBox,QFileDialog,QColorDialog颜色,QFontDialog字体

    QDialog 对话框: 1.模态对话框: QDialog dlg(this); // 显示模态对话框 exec ,后面的不可操作 dlg.exec(); // 阻塞 2.非模态对话框: QDialo ...

  4. 第六周博客作业<西北师范大学|李晓婷>

    1.助教博客链接:https://home.cnblogs.com/u/lxt-/ 2.作业要求链接:https://www.cnblogs.com/nwnu-daizh/p/10569690.htm ...

  5. marquee标签的使用

    marquee语法    <marquee></marquee> 实例一<marquee>Hello, World</marquee> marquee常 ...

  6. python7 数据类型的相互转化 字符编码

    复习 1.深浅拷贝    ls = [1, 'a', [10]]    值拷贝:直接赋值 ls1 = ls, ls中的任何值发生改变,ls1中的值都会随之改变    浅拷贝:通过copy()方法 ls ...

  7. Markdown——入门指南

    导语: Markdown 是一种轻量级的「标记语言」,它的优点很多,目前也被越来越多的写作爱好者,撰稿者广泛使用.看到这里请不要被「标记」.「语言」所迷惑,Markdown 的语法十分简单.常用的标记 ...

  8. C语言博客05--指针

    C语言博客05--指针 1.本章学习总结 1.1 思维导图 1.2 本章学习体会及代码量学习体会 1.2.1 学习体会 在本周的学习过程中,我们学习了指针的用法.说实话,指针的用法有点绕,之前一直没搞 ...

  9. Angular+Ionic+RSA实现后端加密前端解密功能

    因业务需要,需要给android应用安装证书,通过读取证书文件内容实现某些功能的控制: 流程:后台通过publicKey对指定内容的文件进行加密,生成文件共客户下载,客户下载后选择该证书文件读取到应用 ...

  10. 五十八、linux 编程——UDP 编程 广播

    58.1 广播介绍 58.1.1 介绍 广播实现一对多的通讯 它通过向广播地址发送数据报文实现的 58.1.2 套接字选项 套接字选项用于修饰套接字以及其底层通讯协议的各种行为.函数 setsocko ...