zoukankan      html  css  js  c++  java
  • python正则表达式

    所使用模块:re

    对于Python使用正则一般都是先将正则表达式的字符串形式编译然后进行实例化。如下进行一个最简单的正则匹配

    #encoding=utf-8
    #by def
    
    import re
    pattern = re.compile(r'hello') #实例化
    if re.match('hello world'): #使用pattern去匹配字符串
        print "true"
    else:
        print "false"

    输出:true

    因为其已经匹配到了所以输出true

    re模块除了拥有compile这个方法以外还有

    实例方法[ | re模块方法]:

      1. match(string[, pos[, endpos]]) | re.match(pattern, string[, flags]): 
        这个方法将从string的pos下标处起尝试匹配pattern;如果pattern结束时仍可匹配,则返回一个Match对象;如果匹配过程中pattern无法匹配,或者匹配未结束就已到达endpos,则返回None。 
        pos和endpos的默认值分别为0和len(string);re.match()无法指定这两个参数,参数flags用于编译pattern时指定匹配模式。 
        注意:这个方法并不是完全匹配。当pattern结束时若string还有剩余字符,仍然视为成功。想要完全匹配,可以在表达式末尾加上边界匹配符'$'。 
        示例参见2.1小节。
      2. search(string[, pos[, endpos]]) | re.search(pattern, string[, flags]): 
        这个方法用于查找字符串中可以匹配成功的子串。从string的pos下标处起尝试匹配pattern,如果pattern结束时仍可匹配,则返回一个Match对象;若无法匹配,则将pos加1后重新尝试匹配;直到pos=endpos时仍无法匹配则返回None。 
        pos和endpos的默认值分别为0和len(string));re.search()无法指定这两个参数,参数flags用于编译pattern时指定匹配模式。 
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        # encoding: UTF-8
        import re
         
        # 将正则表达式编译成Pattern对象
        pattern = re.compile(r'world')
         
        # 使用search()查找匹配的子串,不存在能匹配的子串时将返回None
        # 这个例子中使用match()无法成功匹配
        match = pattern.search('hello world!')
         
        if match:
            # 使用Match获得分组信息
            print match.group()
         
        ### 输出 ###
        # world
      3. split(string[, maxsplit]) | re.split(pattern, string[, maxsplit]): 
        按照能够匹配的子串将string分割后返回列表。maxsplit用于指定最大分割次数,不指定将全部分割。 
        1
        2
        3
        4
        5
        6
        7
        import re
         
        p = re.compile(r'd+')
        print p.split('one1two2three3four4')
         
        ### output ###
        # ['one', 'two', 'three', 'four', '']
      4. findall(string[, pos[, endpos]]) | re.findall(pattern, string[, flags]): 
        搜索string,以列表形式返回全部能匹配的子串。 
        1
        2
        3
        4
        5
        6
        7
        import re
         
        p = re.compile(r'd+')
        print p.findall('one1two2three3four4')
         
        ### output ###
        # ['1', '2', '3', '4']
      5. finditer(string[, pos[, endpos]]) | re.finditer(pattern, string[, flags]): 
        搜索string,返回一个顺序访问每一个匹配结果(Match对象)的迭代器。 
        1
        2
        3
        4
        5
        6
        7
        8
        import re
         
        p = re.compile(r'd+')
        for m in p.finditer('one1two2three3four4'):
            print m.group(),
         
        ### output ###
        # 1 2 3 4
      6. sub(repl, string[, count]) | re.sub(pattern, repl, string[, count]): 
        使用repl替换string中每一个匹配的子串后返回替换后的字符串。 
        当repl是一个字符串时,可以使用id或g<id>、g<name>引用分组,但不能使用编号0。 
        当repl是一个方法时,这个方法应当只接受一个参数(Match对象),并返回一个字符串用于替换(返回的字符串中不能再引用分组)。 
        count用于指定最多替换次数,不指定时全部替换。 
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        import re
         
        p = re.compile(r'(w+) (w+)')
        s = 'i say, hello world!'
         
        print p.sub(r'2 1', s)
         
        def func(m):
            return m.group(1).title() + ' ' + m.group(2).title()
         
        print p.sub(func, s)
         
        ### output ###
        # say i, world hello!
        # I Say, Hello World!
      7. subn(repl, string[, count]) |re.sub(pattern, repl, string[, count]): 
        返回 (sub(repl, string[, count]), 替换次数)。 
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        import re
         
        p = re.compile(r'(w+) (w+)')
        s = 'i say, hello world!'
         
        print p.subn(r'2 1', s)
         
        def func(m):
            return m.group(1).title() + ' ' + m.group(2).title()
         
        print p.subn(func, s)
         
        ### output ###
        # ('say i, world hello!', 2)
        # ('I Say, Hello World!', 2)
  • 相关阅读:
    InfluxDB执行语句管理(query management)
    InfluxDB数据备份和恢复方法,支持本地和远程备份
    WordPress多本小说主题–WNovel主题发布,十分钟搭建小说站! 现已更新至1.2版本
    InfluxDB安装后web页面无法访问的解决方案
    Influxdb原理详解
    InfluxDB学习之InfluxDB连续查询(Continuous Queries)
    InfluxDB学习之InfluxDB数据保留策略(Retention Policies)
    InfluxDB学习之InfluxDB的HTTP API查询操作
    玩游戏,王者荣耀,记录
    开源抓包工具PowerSniff(支持lua,c语言作为脚本实时分析)
  • 原文地址:https://www.cnblogs.com/xishaonian/p/7639449.html
Copyright © 2011-2022 走看看