python中的re模块

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

python中的特殊字符:

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

  2) 元字符 “.”;

  3) 转义字符 “\”;

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

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

  6) 择一匹配,|

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

  8) \number 变量引用。

 

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))

posted @ 2018-01-08 16:06  _9_8  阅读(509)  评论(0编辑  收藏  举报