zoukankan      html  css  js  c++  java
  • 分组在re模块中的使用

    import re
    
    #search
    s = "<a>wahaha</a>"  #标签语言 html 和 web相关
    ret= re.search("(>)(w+)(<)",s)
    print(ret.group()) #>wahaha<  和print(ret.group(0))结果一样
    print(ret.group(1)) #>        数字参数代表取对应分组中的内容
    print(ret.group(2)) #wahaha
    print(ret.group(3)) #<
    # search分组 通过数字显示
    
    
    # findall
    # 为了findall可以顺利取到分组中的内容,有一种特殊的语法,就是优先显示分组内容
    ret= re.findall(">w+<",s)
    print(ret) #['>wahaha<']
    
    ret= re.findall(">(w+)<",s) #加括号会优先显示(w+)的内容,两边的> < 就不显示了
    print(ret) #['wahaha']
    
    # 取消分组优先(?: 正则表达式)
    ret= re.findall("d+(.d+)?", "1.234.5.678")
    print(ret)  #['.234', '.678'] python把正则中的括号当成了优先分组,所以取出来的是小数点之后的,
    # 因为正则规则用了()规定小数,所以函数会当成优先级执行
    
    ret2= re.findall("d+(?:.d+)?", "1.234.5.678") #在括号中加上?: 可以取消优先级
    print(ret2) #['1.234', '5.678']
    
    
    #split
    #没有分组的时候会把切掉的内容不显示,加上分组会一起显示出来
    ret = re.split("d+","alex29egon30")
    print(ret)  #['alex', 'egon', '']
    
    ret = re.split("(d+)","alex29egon30")
    print(ret)  #['alex', '29', 'egon', '30', '']
    
    
    #分组命名  (?P<这个组的名字>正则表达式)
    s = '<a>wahaha</a>'
    ret = re.search('>(?P<name>w+)<',s)#把想取出来的wahaha单独括起来了,并且加了 ?P 和一个名字 (name)
    print(ret.group())  #>wahaha<
    print(ret.group(1))  #wahaha  因为就一个分组,所以直接取wahaha
    print(ret.group('name')) #wahaha  也可以通过组名取值
    
    
    s = '<a>wahaha</a>'
    pattern = '<(w+)>(w+)</(w+)>'
    ret = re.search(pattern,s)
    print(ret.group(1) == ret.group(3))  # True 判断前后两个标签名 a a 字是否一致
    
    
    s = '<a>wahaha</A>'
    pattern = '<(w+)>(w+)</(w+)>'
    ret = re.search(pattern,s)
    print(ret.group(1) == ret.group(3))  # False 判断前后两个标签名 a A 字是否一致
    
    # 使用前面的分组 要求使用这个名字的分组和前面同名分组中的内容匹配的必须一致 s = '<a>wahaha</A>' pattern = '<(?P<tab>w+)>(w+)</(?P=tab)>' ret = re.search(pattern,s) print(ret) #None 前后分组的名字不一致, 返回None s = '<a>wahaha</a>' pattern = '<(?P<tab>w+)>(w+)</(?P=tab)>' #要求使用这个名字的分组和前面同名分组中的内容匹配的必须一致 ret = re.search(pattern,s) print(ret.group(2))

    s = '<a>wahaha</a>'
    pattern = '<(?P<tab>w+)>(w+)</(?P=tab)>' #要求使用这个名字的分组和前面同名分组中的内容匹配的必须一致
    ret = re.findall(pattern,s)
    print(ret) #[('a', 'wahaha')]


    s = '<a>wahaha</a>'
    pattern = r'<(w+)>(w+)</(1)>' #1 直接表示了第一个()里的内容, 这个没有tab,没有组名,直接用数字表达了,但是需要在字符串前加上一个r, 对1转义
    ret = re.findall(pattern,s)
    print(ret) #[('a', 'wahaha', 'a')]

    # 这些情况会用到 
    #
    2018-12-06
    #
    2018.12.6
    #
    2018 12 06
    #
    12:30:30
  • 相关阅读:
    FirstAFNetWorking
    JSONModel 简单例子
    KVO
    KVC
    关于UITableView的性能优化(历上最全面的优化分析)
    浅拷贝和深拷贝
    UI2_异步下载
    UI2_同步下载
    算法图解学习笔记02:递归和栈
    算法图解学习笔记01:二分查找&大O表示法
  • 原文地址:https://www.cnblogs.com/kenD/p/9494179.html
Copyright © 2011-2022 走看看