match() vs search()

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

相關文章
相關標籤/搜索