zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    接口默认值引发Qt调用DLL异常
    360杀毒引发的DLL调用异常
    VS2012基于QT5.1自定接口及插件并实现动态加载
    Qt调用C的DLL
    Qt动态多语言的实现(VS2012开发)
    Qt在VS2012中引用QtWidgets时报GLES2/gl2.h无法打开错误的解决办法
    php判断某字符串是否不以数字或其他特殊字符开头
    mysql的数据类型int、bigint、smallint 和 tinyint取值范围
    28个jQuery性能优化的建议
    主题:iframe高度的自适应
  • 原文地址:https://www.cnblogs.com/mianbaoshu/p/12068736.html
Copyright © 2011-2022 走看看