zoukankan      html  css  js  c++  java
  • 正则-- | 多个字符匹配

    # ### 正则表达式
    # ###(二) 匹配多个字符 => [元字符] 量词符号
    import re
    '''1) ? 匹配0个或者1个a '''
    print(re.findall('a?b','abbzab abb aab'))  
    
    '''2) + 匹配1个或者多个a '''
    print(re.findall('a+b','b ab aaaaaab abb'))
    
    '''3) * 匹配0个或者多个a '''
    print(re.findall('a*b','b ab aaaaaab abbbbbbb'))
    
    '''4) {m,n} 匹配m个至n个a '''
    print(re.findall('a{1,3}b','aaab ab aab abbb aaz aabb aaaaaaaaaabb'))
    print(re.findall('a{1}b','aaab ab aab abbb aaz aabb aaaaaaaaaabb'))
    print(re.findall('a{1,}b','aaab ab aab abbb aaz aabb aaaaaaaaaabb'))
    
    
    # 贪婪匹配 与 非贪婪匹配 [语法:量词的后面加?号]
    """
    贪婪匹配:   默认向更多次数匹配 底层用的是回溯算法;
    非贪婪匹配: 默认向更少次数匹配:
    	
    	在量词的后面加上一个?号,就是非贪婪匹配 例如:.*? .?? .+? .{m,n}? .*?用的更多
    	如果遇到了子这个字,在非贪婪模式下,匹配到第一个就返回.
    
    
    回溯算法:
    从左向右进行匹配,一直向后找,直到再也找不到了,回头,拿离右侧最近的那个值
    """
    
    strvar = "刘能和刘铁锤和刘大棍子12313子"
    lst = re.findall("刘.",strvar)
    # 贪婪匹配
    print(lst)
    lst = re.findall("刘.?",strvar)
    print(lst)
    lst = re.findall("刘.+",strvar)
    print(lst)
    lst = re.findall("刘.*",strvar)
    print(lst)
    lst = re.findall("刘.*子",strvar)
    print(lst)
    lst = re.findall("刘.{1,20}子",strvar)
    print(lst,"<==>")
    
    # 非贪婪匹配
    strvar = "刘能和刘铁锤和刘大棍子12313子"
    lst = re.findall("刘.??",strvar)
    print(lst)
    lst = re.findall("刘.+?",strvar)
    print(lst)
    lst = re.findall("刘.*?",strvar)
    print(lst)
    # 匹配到第一个子就直接返回
    lst = re.findall("刘.*?子",strvar)
    print(lst)
    
    lst = re.findall("刘.{1,20}?子",strvar)
    print(lst)
    
    
    #  ###(三) 匹配开头结尾 => [元字符] 边界符号
    """
     用来匹配边界 word 匹配d为右边界 d  匹配w为左边界w
     退格 backspace 是一个转义字符
    一般写正则表达式的时候,字符串的前面加上一个r,让转义字符失效,
    """
    # 贪婪匹配
    lst = re.findall(r".*d","word pwd abc")
    print(lst)
    # 非贪婪匹配
    lst = re.findall(r".*?d","word pwd abc")
    print(lst)
    # 优化版:舍掉空格
    lst = re.findall(r"S*?d","word pwd abc")
    print(lst)
    # 匹配单词的左边界
    lst = re.findall(r"w.* ","word abc")
    
    print(lst)
    
    
    """
    ^ 必须以某个字符开头,后面的字符无所谓 
    $ 必须以某个字符结尾,前面的字符无所谓
    如果正则里面包含了^或者$ 意味着要把字符串看成一个整体
    """
    strvar = "大哥大嫂大爷"
    print(re.findall('大.',strvar))
    print(re.findall('^大.',strvar))
    print(re.findall('大.$',strvar))
    print(re.findall('^大.$',strvar))
    print(re.findall('^大.*?$',strvar))
    
    print(re.findall('^大.*?大$',strvar))
    print(re.findall('^大.*?爷$',strvar))
    
    # 把字符串看成一个整体,只要一个结果
    print(re.findall('^g.*? ' , 'giveme 1gfive gay '))
    print(re.findall('five$' , 'aassfive'))
    print(re.findall('five$' , 'aassfive00'))
    print(re.findall('^giveme$' , 'giveme'))
    print(re.findall('^giveme$' , 'givemeq'))
    print(re.findall('^giv.me$' , 'giveme'))
    
    print(re.findall('^giveme$' , 'giveme giveme'))
    print(re.findall('giveme' , 'giveme giveme'))
    print(re.findall("^g.*e",'giveme 1gfive gay'))
    

      

  • 相关阅读:
    Fatal error compiling: invalid target release: 11 -> [Help 1]
    java -jar 设置日志位置
    wordpress 添加 显示磁盘剩余空间百分比的插件
    记录我个人对Telegram的了解
    Ubuntu 18.04 切换使用Python3
    基于 CI 1.7.x 的 项目使用新版本CI的文件缓存类库
    使用sqlyog工具同步两个相同结构的数据库之间的数据
    了解GTIN小记
    华为手机设置桌面图标角标提醒的实现
    Quill编辑器IOS下无法获取焦点的解决方法
  • 原文地址:https://www.cnblogs.com/huangjiangyong/p/10924363.html
Copyright © 2011-2022 走看看