原文来自FishC,本文只是笔记而已。
Python通过re模块为正则表达式引擎提供一个接口,同时允许我们将正则表达式编译成模式对象,并用他们来进行匹配。
1)文中建议我们少用反斜杠,多使用原始字符串来表示正泽表达式(就是在字符串前边加上r);
2)创建模式对象:
import re
p=re.compile('[a-z]+')
+表示匹配一次或者多次。上面p有几个重要的方法:
match() 判断一个正则表达式是否从开始处匹配一个字符串;
search() 遍历,找到匹配的第一个位置
findall() 遍历,找到所有位置,并以列表的形式返回
finditer() 遍历,找到所有位置,并以迭代器的形式返回
3)空字符串无法匹配(会返回None);
m=p.match('fishc')
m作为匹配对象包含以下几个重要方法:
group() 返回匹配的字符串
start() 返回匹配的开始位置
end() 返回匹配的结束位置
span() 返回一个元祖表示匹配位置(开始,结束)
4)实际使用中通常会把结果储存在一个局部变量中,如上面的m,并检查其返回值是否为None。
p=re.compile(...)
m=p.match('string goes here')
if m:
print('Match found:',m.group))
else:
print('No match')
5)有两个方法可以返回所有的匹配结果,findall,finditer:
显然,使用findall()需要事先创建一个列表,而finditer()则是将匹配对象作为一个迭代器返回的,如果返回的列表很大,建议使用finditer()版本。