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

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值