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() 代替。優化