zoukankan      html  css  js  c++  java
  • re模块和分组

    re模块和分组

    分组命名

    • (?P<名字>正则表达式)
    import re
    
    s1 = "<h1>wahaha</h1>"
    s2 = "<a>wahaha ya wahaha</a>"
    
    ret = re.search("<(w+)>(.*?)</w+>",s1)
    print(ret) #相当于ret.group(0)
    print(ret.group(0))
    print(ret.group(1))
    print(ret.group(2))
    
    
    
    import re
    
    s1 = "<h1>wahaha</h1>"
    s2 = "<a>wahaha ya wahaha</a>"
    
    ret = re.search("<(?P<tag>w+)>(?P<cont>.*?)</w+>",s1) #给分组命名,注意中英文的?
    print(ret) #相当于ret.group(0)
    int(ret.group("tag")) #取得是tag分组的内容
    print(ret.group("cont"))#取得是cont分组的内容
    #输出结果
    #<re.Match object; span=(0, 15), match='<h1>wahaha</h1>'>
    #h1
    #wahaha
    
    

    引用分组

    • 前面创建分组,后面引用分组
    • 引用分组(?P=组名)这个组中的内容必须和之前已经存在的组匹配到的内容一模一样
    s1 = "<h1>wahaha</h1>"
    s2 = "<a>wahaha ya wahaha</a>"
    import re
    ret = re.search("<(?P<tag>w+)>.*?</(?P=tag)>",s1)
    print(ret)
    
    
    import re
    ret = re.search("<(?P<tag>w+)>.*?</(?P=tag)>",s1)
    print(ret.group("tag"))
    #输出结果为h1
    
    
    import re
    ret = re.search(r"<(w+)>.*?<(/1)>",s1)
    print(ret.group(1)
    #输出结果为h1,
    #与上面的方法达到的效果是一致的
    
          
    #分组和findall
          #默认findall优先显示分组内的内容
          #取消分组优先显示(?:正则表达式)
    import re
    ret = re.findall("d(d)","aoel83")
    #findall遇到正则表达式中的分组,会优先显示分组中的内容
    print(ret)
    #输出结果
    #['3']
    
          
          
    import re
    ret = re.findall("d+(.d+)?","12.234+2")
    print(ret)
    #输出结果
    #['.234', ''] 
    #因为是 优先分组内的内容内容,而?是持续匹配,因此2匹配了,但分组内无法显示
          
          
    import re
    ret = re.findall("d+(.d+)","12.234+2")
    print(ret)
    #输出结果
    #['.234']
          
    import re
    ret = re.findall("d+(?:.d+)?","12.234+2")
    print(ret)
    #输出结果
    #['12.234', '2']
    #?:——>取消分组优先      
          
    #split
          #会保留分组中本来应该被切割的内容
          
     #练习题
     #有时候我们想匹配的内容包含在不匹配的内容中,这个时候只需要把不想匹配的先匹配出来,再通过手段去掉     
    import re      
    ret = re.findall(r"d+.d|d+","1-2*(60+(-40.35/5)-(-4*3)") #——>可以匹配其中的小数
    print(ret)  
    #输出结果
    #['1', '2', '60', '40.3', '5', '5', '4', '3'] 
          
    import re
    ret = re.findall(r"d+.d|(d+)","1-2*(60+(-40.35/5)-(-4*3)")
    ret.remove("")#移除空格
    print(ret) 
    #输出结果
    ['1', '2', '60', '5', '5', '4', '3']      
    
    记录学习的点点滴滴
  • 相关阅读:
    POJ2559/HDU1506 Largest Rectangle in a Histogram (cartesian tree)
    POJ2201 Cartesian Tree (cartesian tree)
    一本通1007
    一本通1006
    一本通1005
    一本通1004
    一本通1003
    一本通1002
    一本通1001
    一本通1000
  • 原文地址:https://www.cnblogs.com/yangzilaing/p/14882569.html
Copyright © 2011-2022 走看看