Python妙用re.sub分析正则表达式匹配过程
声明:本文所使用方法为老猿自行研究并编码,相关代码版权为老猿所有,禁止转载文章,代码禁止用于商业用途!
在《第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分析正则表达式匹配过程的更多相关文章
- python 正则表达式匹配过程
- [No0000100]正则表达式匹配解析过程分析(正则表达式匹配原理)&regexbuddy使用&正则优化
常见正则表达式引擎引擎决定了正则表达式匹配方法及内部搜索过程,了解它至关重要的.目前主要流行引擎有:DFA,NFA两种引擎. 引擎 区别点 DFA Deterministic finite autom ...
- [转载]Python正则表达式匹配反斜杠'\'问题
转载自csdnblog:Python正则表达式匹配反斜杠'\'问题 在学习Python正则式的过程中,有一个问题一直困扰我,如何去匹配一个反斜杠(即“\”)? 一.引入 在学习了Python特殊字符和 ...
- Python正则表达式书写容易碰到的陷阱:\W*和\W*?匹配过程遇到的问题
老猿在分析<Python正则表达式\W+和\W*匹配过程的深入分析>中的问题时,想到一个问题,如果"re.split('(\W*)','Hello,world')"的处 ...
- Python: 正则表达式匹配反斜杠 "\"
Python正则表达式匹配反斜杠 "\" eg: >>>a='w\w\w' 'w\\w\\w' # 打印出来的 "\\" 被转义成 一个反斜 ...
- 正则表达式匹配可以更快更简单 (but is slow in Java, Perl, PHP, Python, Ruby, ...)
source: https://swtch.com/~rsc/regexp/regexp1.html translated by trav, travmymail@gmail.com 引言 下图是两种 ...
- Python 使用正则表达式匹配IP信息
使用正则表达式匹配IP地址 .MAC地址 .网卡名称: #!/usr/bin/env python #-*- coding:utf-8 -*- import re from subprocess im ...
- Python从文件中读取字符串,用正则表达式匹配中文字符的问题
2013-07-27 21:01:37| 在Windows下,用Python从.txt文件中读取字符串,并用正则表达式匹配中文,在网上看了方法,用的时候发现中文没有被匹配. ...
- Python用正则表达式匹配汉字
Python用正则表达式匹配汉字 匹配多个汉字,不包括空格 import re res = re.match(r'[\u4E00-\u9FA5]+', '我是 汉字') print(res) # &l ...
随机推荐
- 2.while循环
while循环 #-*- coding: utf-8-*- #指定识别utf-8的字符串 1.while循环以及跳出循环 while True: #无限循环 print('i love pyhon') ...
- 5Flask数据库
video 43 安装mysql video44 SQLALchemy连接
- wait()系统调用分别演示在父子进程
废话不多说开代码 在父进程调用wait() #include<stdio.h> #include<unistd.h> #include<sys/wait.h> in ...
- UNP——第四章,TCP套接字编程
1.socket 函数 首先被调用的函数,用于选择通信协议. socket调用成功后,得到的套接字为主动套接字CLOSED状态. PF 和 AF 的关系 PF的是协议族,AF是地址族,理论上一个PF包 ...
- python之《set》
set 是python里面的集合的概念 list_1 = [1,2,3,4,5,6,] list_2 = set(list_1) print(list_1,type(list_1)) print(li ...
- CTDB使用radosobject作为lockfile
前言 服务器的服务做HA有很多种方式,其中有一种就是是用CTDB,之前这个是独立的软件来做HA的,现在已经跟着SAMBA主线里面了,也就是跟着samba发行包一起发行 之前CTDB的模式是需要有一个共 ...
- 分布式监控系统之Zabbix基础使用
前文我们了解了分布式监控系统zabbix的相关组件的作用和zabbix的部署,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13997582.html:今天我们 ...
- uniapp开发小程序
uniapp开发小程序 uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS.Android.Web(响应式).以及各种小程序(微信/支付宝/百度/头条 ...
- Docker学习—Swarm
前言: 前一篇<Docker学习-Machine>中对Machine 进行了学习,本篇继续学习Swarm,那么Swarm是什么呢,有什么用呢?接下来一步步了解. 一.什么是Docker-S ...
- Pinpoint 编译环境搭建(Pinpoint系列一)
本文基于 Pinpoint 2.1.0 版本 目录 一.2.1.0 版本特性 二.编译环境准备 三.编译注意事项 四.编译目录 五.注意事项 新版本的内容参考官方文档, Pinpoint的整个搭建是历 ...