• devi into python 笔记(六)正则表达式 原始字符串


    字符串函数replace:

        #string.replace:
        #字符串的replace方法:替换子串,不改变原来的字符串
        s = "broad road"
        #打印出来会发现不单单是road被替换了,broad也变了
        #这是因为broad也包含road,replace方法
        print s.replace('road', 'rd.')

    原始字符串 r'string':

        #原始字符串:只要在普通字符串前加上 r 就可以
        #这样做是表明这个字符串中的所有字符都不转义,避免反斜线灾难
        print r'this is a 	
     string'
        #原始字符串在正则表达式中很重要

    Python正则表达式:

       #Python的正则包
        #$:匹配字符串末尾的,相对应的匹配字符串开头的是 ^
        s = 'broad road'
    #re.sub(pattern, str1, str2):将str2中符合pattern的串替换为str1
        print re.sub('road$', 'rd.', s)
        #但如果末尾是broad呢,很遗憾,也会被替换
        s = 'broad broad'
        print re.sub('road$', 'rd.', s)
    
        #:单词的边界必须在这里
        #这样不论road出现在哪里,只要是整个的单词就会匹配
        s = 'broad road room1'
        print re.sub(r'road', 'rd.', s)

    re.search(pattern, string): pattern正则表达式 string 要匹配的字符

        import re
        #re.search(pattern, string):re包重要的函数
        #pattern:正则 string:要匹配的字符串 
        #返回值:不能匹配返回None 匹配成功返回一堆描述,反正不是None,根据一切皆对象姑且称之为'匹配成功对象'
        #^匹配开始,$匹配结束 ?匹配0个或1个M
        pattern = '^M?M?M?$'
        print re.search(pattern, 'M')
        print re.search(pattern, 'MMMM')
    
        #|匹配前后两个表达式,先匹配左边的表达式,一旦成功匹配就不去匹配右边的表达式。
        #记住(A|B|C)含义是:精确匹配ABC中的一个,匹配一个后便不再匹配其他的了
        #如果不加括号,则其作用范围就是整个正则表达式
        pattern = '^M?M?M?(CM|CD|D?C?C?C?)$'
        print re.search(pattern, 'MCM')
        print re.search(pattern, 'MCMC')
    
        #{m}匹配前面字符m次
        #{m, n}匹配前面的字符m次至n次,m n都可以为0
        pattern = '^M{0,3}$'
        print re.search(pattern, 'M')
        print re.search(pattern, 'MMMM')

    松散正则表达式: re.VERBOSE 、 re.compile().search().groups()

        #松散正则表达式re.VERBOSE
        #1忽略空白:比如空格制表符回车等,也就是说可以在表达式的任意地方添加任意多的空白。
        #2忽略注释:这样就可以在合适的位置加上注释提高可读性。
        pattern = """
                  ^             #在这里匹配开始
                  M{0,3}    #匹配0-3个M
                  (CM|CD|D?C?C?C?)  #匹配xxx
                  $             #在这里匹配结束
                  """
        #使用松散正则,要给search一个re.VERBOSE表明这是一个松散正则
        print re.search(pattern, 'MCM')
        print re.search(pattern, 'MCM', re.VERBOSE)
        print re.search(pattern, 'MCMC', re.VERBOSE)
        #如果要在松散正则中匹配空白而不是被忽略掉,就要用转移字符来做
        pattern = """
                  ab cd
                  """
        #这表示要在b和c之间匹配一个空格
        print re.search(pattern, 'ab cd', re.VERBOSE)
    
        #compile 和 groups 简单使用
       #re.compile():接受一个正则表达式返回一个正则对象
    pattern = re.compile(r'^(d{3})-(d{3})-(d{4})$') #正则对象的search()方法匹配同re.search()类似,接受一个正则表达式,匹配失败返回None,成功返回'匹配成功对象'
       #'匹配成功对象'.gourps()返回一个tuple,元素对应于前面正则表达式中的组。一个小括号即使一个组
       #匹配成功返回的'匹配成功对象'才能调用groups,因为匹配失败返回None,是没有groups()函数的
    print pattern.search('800-555-1212').groups()
  • 相关阅读:
    dell台式机网络唤醒
    今天学习到ROS的PCC的新的一种场景,用PCC不是为了带宽叠加而是为了换IP,PCC的标准做法
    默认ros安装好以后,可能对外开放的端口号,可能被黑客利用的地方,ros的0day漏洞
    ros-winbox利用防火墙安全登录,二次碰撞方法
    S5120V2-IRF2配置
    routeros ros mikrotik的ipsec配置,注意配置的步骤,以及哪些硬件支持哪种加速
    60岁-80岁老年人住院医疗险,既往症可理赔!家有长辈首选
    docker上2分钟安装mikrotik routeros
    pandas filter数据筛选
    (纪录片)光的故事 BBC Light Fantastic (2004)
  • 原文地址:https://www.cnblogs.com/lipijin/p/3171724.html
Copyright © 2020-2023  润新知