• python 正则表达式 中级


    1.子表达式

    将几个字符的组合形式看做一个大的字符,例如匹配IP地址,形如 127.0.0.1
    答案一:p1='d{1,3}.d{1,3}.d{1,3}.d{1,3}'
    pattern1 = re.compile(p1)
    测试数据:aa='127.0.0.1'或'.tyw127.0.0.1rceaa'或'1.2.tyw127.0.0.1rceaa'
    re.search(pattern1,aa).group(0)
    结果:'127.0.0.1'
    pattern1.findall(aa)
    结果:['127.0.0.1']
     
    答案二:p1='(d{1,3}.){3}d{1,3}'
    pattern1 = re.compile(p1)
    aa='1.2.tyw999.000.3.4.5.6rceaa'
    re.search(pattern1,aa).group(0)
    结果:'999.000.3.4'
    pattern1.findall(aa)
    结果:['3.']

    2.向前向后查找

    举例一:p1 = r"(?<=<h1>).+?(?=</h1>)"
    第一个?<=表示在被匹配字符前必须得有<h1>,后面的?=表示被匹配字符后必须有</h1>
    简单来说,p = r"(?<=A)XX(?=B)" 匹配的是AXXB这样的字符串中的XX
     
    举例二:p1 = r"(?<={0}).+?(?= )".format('Undistort Flag: ')
        pattern1 = re.compile(p1)                         #编译正则表达式
        matcher1 = re.search(pattern1, output)  #在源文本中搜索符合正则表达式的部分
        rtv_lag = matcher1.group(0)
        print '~~~~~~~~`',rtv_lag
     
    向前查找向后查找不必同时出现,也可以只满足一个条件。只要记住?<=后面跟着的是前缀要求,?=后面跟的是后缀要求即可。

    3.回溯引用

    回溯引用是一个动态的正则表达式,让你根据实际情况进行匹配。
    例如想要匹配HTML页面中<h1></h1>到<h6></h6>中的内容,如果简单地使用表达式p = r"<h[1-6]>.*?</h[1-6]>"可能会匹配出多余的标签为<h1>hello world</h3>的数据;针对这种情况,我们需要在匹配到第一个子表达式时获取到匹配到的值,需要可以使用回溯引用。
    答案:p1 = r"<h([1-6])>.*?</h1>"
    其中,第二个子表达式中出现了1,这里的1表示第一个子表达式,它是动态的,随着前面第一个子表达式的匹配到的东西而变化的。比如前面的子表达式内是[1-6],在实际字符串中找到了1,那么后面的1就是1,如果前面的子表达式在实际字符串中找到了2,那么后面的1就是2。
    类似的,2,3,....就代表第二个第三个子表达式。

    参考:https://www.cnblogs.com/chuxiuhong/p/5907484.html

     

  • 相关阅读:
    二分查找和线性查找(二)
    自定义数组java(一)
    MATLAB中load和imread的读取方式区别
    图像Demosaic算法及其matlab实现
    Matlab GUI学习总结
    matlab gui matlab gui 鼠标点击显示图像颜色值
    【图像处理】RGB Bayer Color分析
    MATLAB图像处理_Bayer图像处理 & RGB Bayer Color分析
    IPC图像处理项目流程图
    matlab图像处理程序大集合
  • 原文地址:https://www.cnblogs.com/mianbaoshu/p/12068736.html
Copyright © 2020-2023  润新知