zoukankan      html  css  js  c++  java
  • python中的re模块

    python中的正则表达式匹配,可以import  re模块来实现。

    python中的特殊字符:

      1) 量词 *, +, ?, {m}, {m, n} 与perl中类似;

      2) 元字符 “.”;

      3) 转义字符 “”;

      4) 字符集[],预定义字符集d,D,s,S,w,W

      5) 锚位符,^, $, A, z, , B

      6) 择一匹配,|

      7) 分组变量,(...), (?P<name>...) 

      8) umber 变量引用。

    python中的量词默认也是贪婪模式,可在量词*之后,加?,来变为非贪婪模式, “ab*?” 匹配a

    匹配的pattern,前加r,表示raw string,主要区别在对转义字符\,不再做特殊处理

            加r,并不影响d,w这样的字符集

    re模块中有定义的function,也可以先编译为一个pattern对象或者match对象,在进行function调用。

    re模块可以直接调用的function:

      1)re.compile(string, flag),编译产生一个pattern实体。

        string,表示匹配的模式pattern;

        flag,表示匹配的flag,python定义的有:re.I表示忽略大小写,

                           re.S改变元字符.的意义,可以任意匹配,包括换行符,

                           re.X详细模式,pattern字符串可以分行,并且包含注释,

        返回为pattern对象,

      2)re.match(pattern, string,flag),一次简单的匹配,没有pattern实体被编译出来,只是从字符串的首字符开始匹配,不是line的首字符

        返回值为match对象,

      3)re.search(pattern,string,flag),返回的也是一个match对象。匹配不到,返回None。

      4)re.split(pattern,string,maxsplit,flags),返回的是分割后的一个字符串的list

      5)re.findall(pattern,string,flags),返回的是一个字符串的list

      6)re.finditer(pattern,string,flags),返回的是一个iterator类型的list

      7)re.sub(pattern,repl,string,count,flag),返回修改之后的string,并不直接修改原字符串

    pattern对象的内部变量与函数:pattern对象不能直接实例化,只能通过compile来产生。

      属性:1) pattern,编译时,用的字符串;

         2) flags,编译时,用的flag;

            3) groups,编译时,的分组数量;

            4) groupindex,编译时,有别名的分组字典,别名为键,匹配的字符为值;

      方法:1) match(string, pos, endpos),返回一个正常的match对象,可能只是匹配了部分字符,可以在尾部加"$"字符。

         2) search(string, pos, endpos),匹配到返回一个match对象,否则返回一个NONE;

            3) split(string, maxsplit),返回一个分开后的列表;

            p = re.compile(r'd+')

            print  p.split('one1two2three3four4')     输出['one', 'two', 'three', 'four']

            4) findall(string, pos, endpos),以列表的形式,返回全部匹配的字符串,一个列表元素,其中包含一个元组

            p = re.compile(r'd+')

            print  p.findall('one1two2three3four4')     输出['1', '2', '3', '4']

         5) finditer(string, pos, endpos),按顺序返回一个iterator的迭代器;

            6) sub(repl, string, count),替代操作,并不会直接修改原字符串,返回替换之后的字符串

            p = re.compile(r'(w+) (w+)')

            s = 'i say, hello world!'

            print p.sub(r'2 1', s)   返回sayi, world hello!

         7)  subn(repl, string, count),返回list和替换次数;

    match对象的内部变量与函数:

      属性:1) string:匹配时使用的文本;

            2) re:匹配时使用的pattern对象;

            3) pos:文本中正则表达式开始搜索的索引;

         4)  endpos:文本中正则表达式结束搜索的索引;

         5)  lastindex:最后一个被捕获的分组的索引;

         6)  lastgroup:最后一个被捕获的分组的别名,没有,则为none;

      方法:1)  group(1..n),返回一个或多个分组变量

              2)  groups(),返回全部的分组变量;数据结构是一个list 

         3)  groupdict(),返回有别名的分组变量的字典;

         4)  start(),end(),span,返回某个分组变量的字符起始字符个数;

    当re中输入string为变量时,可以使用%格式化打印

      a= ‘hym’

      s = re.compile("%s" % (a))

  • 相关阅读:
    LeetCode重建二叉树系列问题总结
    LeetCode二叉树的前序、中序、后序遍历(递归实现)
    Redis持久化方式的选择
    Redis客户端——Jedis的使用
    Redis初识
    Java并发编程面试题 Top 50 整理版
    @GeneratedValue源码解析
    @Controller和@RestController源码解析
    Spring Boot整合Mybatis并完成CRUD操作
    Redis数据结构和常用API
  • 原文地址:https://www.cnblogs.com/-9-8/p/8243185.html
Copyright © 2011-2022 走看看