声明:本文所使用方法为老猿自行研究并编码,相关代码版权为老猿所有,禁止转载文章,代码禁止用于商业用途!

《第11.23节 Python 中re模块的搜索替换功能:sub及subn函数》介绍了re.sub函数,其中的替换内容可以是一个函数,利用该功能我们可以展示正则表达式匹配过程中匹配到的目标子串的匹配顺序、匹配文本的内容和匹配文本在搜索文本中的位置。具体实现如下:

import re
matchcount = 0 def parsematch(patstr,text):
global matchcount
matchcount = 0
re.sub(patstr,matchrsult,text) def matchrsult(m):
global matchcount
matchcount += 1
print(f"第{matchcount}次匹配,匹配情况:")
if(m.lastindex):
for i in range(0,m.lastindex+1):print(f" 匹配子串group({i}): {m.group(i)},位置为:{m.span(i)}") #正则表达式为{m.re},搜索文本为{m.string},
else:print(f" 匹配子串group(0): {m.group(0)},位置为:{m.span(0)}")
return m.group(0)

调用举例:

>>> parsematch(r'(?i)(?P<lab>py\w*)','Python?PYTHON!Learning python with LaoYuan! ')
第1次匹配,匹配情况:
匹配子串group(0): Python,位置为:(0, 6)
匹配子串group(1): Python,位置为:(0, 6)
第2次匹配,匹配情况:
匹配子串group(0): PYTHON,位置为:(7, 13)
匹配子串group(1): PYTHON,位置为:(7, 13)
第3次匹配,匹配情况:
匹配子串group(0): python,位置为:(23, 29)
匹配子串group(1): python,位置为:(23, 29)
>>>
>>> parsematch('(.?)*',"abc")
第1次匹配,匹配情况:
匹配子串group(0): abc,位置为:(0, 3)
匹配子串group(1): ,位置为:(3, 3)
第2次匹配,匹配情况:
匹配子串group(0): ,位置为:(3, 3)
匹配子串group(1): ,位置为:(3, 3)
>>>
>>> parsematch('(?P<l1>Lao)(?P<l2>\w+)(Python)','LaoYuanPython')
第1次匹配,匹配情况:
匹配子串group(0): LaoYuanPython,位置为:(0, 13)
匹配子串group(1): Lao,位置为:(0, 3)
匹配子串group(2): Yuan,位置为:(3, 7)
匹配子串group(3): Python,位置为:(7, 13)
>>>

不过上述分析过程仅用于多次搜索到目标串的时候才有作用,如果只是一次匹配到一个目标串,则无需使用该方法,因为使用匹配对象就很方便的查看匹配信息。

老猿Python,跟老猿学Python!

博客地址:https://blog.csdn.net/LaoYuanPython


请大家多多支持,点赞、评论和加关注!谢谢!

Python妙用re.sub分析正则表达式匹配过程的更多相关文章

  1. python 正则表达式匹配过程

  2. [No0000100]正则表达式匹配解析过程分析(正则表达式匹配原理)&regexbuddy使用&正则优化

    常见正则表达式引擎引擎决定了正则表达式匹配方法及内部搜索过程,了解它至关重要的.目前主要流行引擎有:DFA,NFA两种引擎. 引擎 区别点 DFA Deterministic finite autom ...

  3. [转载]Python正则表达式匹配反斜杠'\'问题

    转载自csdnblog:Python正则表达式匹配反斜杠'\'问题 在学习Python正则式的过程中,有一个问题一直困扰我,如何去匹配一个反斜杠(即“\”)? 一.引入 在学习了Python特殊字符和 ...

  4. Python正则表达式书写容易碰到的陷阱:\W*和\W*?匹配过程遇到的问题

    老猿在分析<Python正则表达式\W+和\W*匹配过程的深入分析>中的问题时,想到一个问题,如果"re.split('(\W*)','Hello,world')"的处 ...

  5. Python: 正则表达式匹配反斜杠 "\"

    Python正则表达式匹配反斜杠 "\" eg: >>>a='w\w\w' 'w\\w\\w' #  打印出来的 "\\" 被转义成 一个反斜 ...

  6. 正则表达式匹配可以更快更简单 (but is slow in Java, Perl, PHP, Python, Ruby, ...)

    source: https://swtch.com/~rsc/regexp/regexp1.html translated by trav, travmymail@gmail.com 引言 下图是两种 ...

  7. Python 使用正则表达式匹配IP信息

    使用正则表达式匹配IP地址 .MAC地址 .网卡名称: #!/usr/bin/env python #-*- coding:utf-8 -*- import re from subprocess im ...

  8. Python从文件中读取字符串,用正则表达式匹配中文字符的问题

    2013-07-27 21:01:37|           在Windows下,用Python从.txt文件中读取字符串,并用正则表达式匹配中文,在网上看了方法,用的时候发现中文没有被匹配.     ...

  9. Python用正则表达式匹配汉字

    Python用正则表达式匹配汉字 匹配多个汉字,不包括空格 import re res = re.match(r'[\u4E00-\u9FA5]+', '我是 汉字') print(res) # &l ...

随机推荐

  1. Grafana+Prometheus+node_exporter监控,Grafana无法显示数据的问题

    环境搭建: 被测linux机器上部署了Grafana,Prometheus,node_exporter,并成功启动了它们. Grafana中已经创建了Prometheus数据源,并测试通过,并且导入了 ...

  2. 内网渗透 day9-免杀基础

    免杀1 目录 1. 会话提升的几种方式 1 2. armitage的熟悉 2 3. handler生成监听器的方法 6 4. 防止会话假死 6 5. 控制台设置编码 7 6. upx加壳 7 7. m ...

  3. 读 <The Lost Horizon> 感

    读它有两个契机.一是小组英语 pre 讲香格里拉,二是高二有个男生课前演讲讲过<消失的地平线>,彼时他一脸陶醉向我们描绘场景和人物.现在我只记得他 PPT 的风景图特别美.他好像去 thu ...

  4. python3:文件读写+with open as语句(转)

    读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘, ...

  5. gcc编译链接用到的环境变量

    PATH ----  可执行程序寻找路径 C_INCLUDE_PATH  ---- 头文件寻找路径 CPLUS_INCLUDE_PATH  --- g++ 头文件路径 LD_LIBRARY_PATH  ...

  6. Andrew Ng 机器学习公开课 - 线性回归

    我的机器学习系列从现在开始将会结合Andrew Ng老师与sklearn的api是实际应用相结合来写了. 吴恩达(1976-,英文名:Andrew Ng),华裔美国人,是斯坦福大学计算机科学系和电子工 ...

  7. Python网络编程_抓取百度首页代码(注释详细)

    1 #coding=utf-8 2 #网络编程 3 4 #客户端建立socket套接字 5 #引入socket模块 6 import socket 7 #实例化一个套接字,2个参数分别是: IPV4. ...

  8. MongoDB笔记2018.2.6

    MongoDB笔记2018.2.6 1.先简单接触下linux,大部分教程是在linux环境下的操作,要不然看不懂教程 2.找教程或视频 教程推荐菜鸟教程 学习MongDB前需要懂一定的Mysql语法 ...

  9. 通过Folx的排序功能来设置下载任务的优先级

    当我们使用Folx进行多任务下载时,突然遇到要下载一个紧急文件的情况,该如何让这个紧急文件的下载任务排在优先的位置?当然,用户也可以先暂停所有的下载任务,仅开启紧急文件的下载任务. 但这种方式需要用户 ...

  10. FL Studio水果音乐制作入门教程

    "没有早期音乐教育,干什么事我都会一事无成".这并非某位音乐家精心熬制的心灵鸡汤,而是出自物理学家爱因斯坦之口,朋友们没有看错,就是那个被称为二十世纪伟大科学家的爱因斯坦,所以,别 ...