zoukankan      html  css  js  c++  java
  • 正则-- | 匹配分组

    # ### 正则表达式
    import re
    """
    # 1.正常分组 ()
    1) 正常情况下用()圆括号进行分组 可以用1 反向引用第一个圆括号匹配的内容。
    2) (?:正则表达式) 表示取消优先显示的功能
    
    
    (正则表达式)    代表分组 findall 把所有分组的内容显示到列表里
    (?:正则表达式)  代表分组 findall 把所有分组的内容不显示到列表里
    """
    print(re.findall('.*?_good','wusir_good alex_good 神秘男孩_good'))
    #['wusir_good', ' alex_good', ' 神秘男孩_good']
    print(re.findall('(.*?)_good','wusir_good alex_good 神秘男孩_good'))
    #['wusir', ' alex', ' secret男']
    print(re.findall('(?:.*?)_good','wusir_good alex_good 神秘男孩_good'))
    
    # | 代表或 
    # 既想匹配abc 还要匹配abcd 
    lst = re.findall("abc|abcd","abc234abcd234")
    print(lst) # 有缺陷,不能够都匹配到
    #任意 把字符串长的写在前面,字符串短的写在后面
    lst = re.findall("abcd|abc","abc234abcd234")
    print(lst)
    
    # 匹配小数 
    '''
    用让原本有意义的字符变得无意义. 
    . 代表任意字符(除了
    ) 
    如果想要让正则匹配一个.
    用. 让点的意思失效.
    '''
    # 3.14 34. .2342 234. . 2344.234
    lst = re.findall("d+.d+","3.14 34. .2342 234. . 2344.234")
    print(lst)
    # 匹配小数和整数
    lst = re.findall("d+.d+|d+","3.14 34. .2342 234. . 2344.234 343 sdfsdf ")
    print(lst)
    print("------112221------")
    # 使用分组的形式来匹配小数和整数
    lst = re.findall("d+(.d+)?","3.14 34. .2342 234. . 2344.234 343 sdfsdf ")
    print(lst)
    print("------111------")
    lst = re.findall("d+(?:.d+)?","3.14 34. .2342 234. . 2344.234 343 sdfsdf ")
    print(lst)
    
    # 匹配135或171的手机号 
    lst = re.findall("135|^171d{8}","171skdjfksjkf 11312312317178787887")
    print(lst)
    print("------------")
    lst = re.findall("135|171[0-9]{8}","171skdjfksjkf 17178787887")
    print(lst)
    
    # ### search   通过正则匹配出第一个对象返回,通过group取出对象中的值 
    """
    findall  把满足条件的所有值都找出来放到列表里面返回
    search   找到一个满足条件的值就直接返回,扔到一个对象当中
    想要获取对象中的值,用group 对象.group()
    """
    obj = re.search("d+","jsdfusudf8989sdfsdf89")
    print(obj)
    res = obj.group()
    print(res)
    
    
    # 匹配www.baidu.com 或者 www.oldboy.com
    obj = re.search("(www).(baidu|oldboy).(com)","www.baidu.com www.oldboy.com")
    res = obj.group()
    print(res)
    # 数字1 代表拿第一个小括号里面的内容
    res = obj.group(1)
    print(res)
    # 数字2 代表拿第一个小括号里面的内容
    res = obj.group(2)
    print(res)
    # 数字3 代表拿第一个小括号里面的内容
    res = obj.group(3)
    print(res)
    
    # groups 一次性把所有小括号里面的内容匹配出来
    res = obj.groups()
    print(res)
    
    
    
    # "5*6-7/3" 匹配 5*6 或者 7/3
    strvar = "5*6-7/3"
    obj = re.search("d+[*/]d+",strvar)
    res = obj.group()
    print(res)
    
    lst = re.findall("d+[*/]d+",strvar)
    print(lst)
    

      

  • 相关阅读:
    你不知道的多重循环的事情
    【浅墨Unity3D Shader编程】之三 光之城堡篇:子着色器、通道与标签的写法 & 纹理混合
    ssh 远程登陆指定port
    GMT和CST的转换
    Swift新手教程系列5-函数+selector在swift中的使用方法
    Mac OS X 10.10, Eclipse+ADT真机调试代码时,Device Chooser中不显示真机的解决方式
    android studio 0.8.1使用和遇到问题解决
    C语言之函数调用17—递归法之中的一个般函数的调用(2)
    C语言之基本算法25—牛顿迭代法求方程近似根
    FineUI之使用SQL脚本从数据库表中生成对应的输入控件
  • 原文地址:https://www.cnblogs.com/huangjiangyong/p/10924367.html
Copyright © 2011-2022 走看看