match() 函数只检查 RE 是否在字符串开始处匹配,而 search() 则是扫描整个字符串。记住这一区别是重要的。记住,match() 只报告一次成功的匹配,它将从 0 处开始;若是匹配不是从 0 开始的,match() 将不会报告它。python
#!python >>> print re.match('super', 'superstition').span() (0, 5) >>> print re.match('super', 'insuperable') None
另外一方面,search() 将扫描整个字符串,并报告它找到的第一个匹配。正则表达式
#!python >>> print re.search('super', 'superstition').span() (0, 5) >>> print re.search('super', 'insuperable').span() (2, 7)
有时你可能倾向于使用 re.match(),只在RE的前面部分添加 .* 。请尽可能不要这么作,最好采用 re.search() 代替之。正则表达式编译器会对 REs 作一些分析以即可以在查找匹配时提升处理速度。一个那样的分析机会指出匹配的第一个字符是什么;举个例子,模式 Crow 必须从 "C" 开始匹配。分析机能够让引擎快速扫描字符串以找到开始字符,并只在 "C" 被发现后才开始所有匹配。函数
添加 .* 会使这个优化失败,这就要扫描到字符串尾部,而后回溯以找到 RE 剩余部分的匹配。使用 re.search() 代替。优化