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