• 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)
  • 相关阅读:
    iptables扩展之udp扩展与icmp扩展
    iptables零基础入门系列
    iptables小结之常用套路
    iptables自定义链
    20202418 202220222 《Python程序设计》实验一报告
    安卓开发——BaseAdapter和SimpleAdapter下的ListView只显示一条
    android.support.design.widget.FloatingActionButton飙红 Cannot resolve
    Java 四舍五入和四舍六入五平分,银行家舍入
    redis缓存淘汰策略LRU和LFU对比与分析
    内存加载PE文件(nim学习系列)
  • 原文地址:https://www.cnblogs.com/xishaonian/p/7639449.html
Copyright © 2020-2023  润新知