Python 正則模式中 search() 和 match() 有什麼區別?

發表於2016-08-29

問:在Python正則模式中search()和match()的區別是什麼?

我已經閱讀了現有的相關文件,但是我總是記不住,碰到類似的問題,我還要不斷地查詢再學習,我希望某個大神能夠給個清晰的案例,讓我能夠很好的記住,或者至少能夠在Stackoverflow上有個地方能夠讓我再學習的時候方便地找到。


答:
re.match位於字串的開頭。它與新行無關,因此它在模式上與^的用法不同。
正如re.match文件所說:

如果在字串的開頭有0個或更多個字元符合正規表示式模式,返回相關匹配的例項物件,如果字串不符合正規表示式模式則返回None.(注這個跟0長度的匹配是有區別的)

注:如果你想要在字串中定位任意一個匹配位置的話,請轉用search()。

re.search搜尋整個字串,正如re.search文件所說:

掃描整個字串,如果產生了一個匹配正則模式就尋找到這個位置,返回相關匹配的物件。如果沒有位置能夠匹配這個模式則返回None.(注意這個跟在字元的某處有0長度的匹配是有區別的。)

所以,如果你想要從字串的一開始就進行匹配或匹配整個字串的話就使用match。它更加快速,否則請使用search。

該文件有個專門的章節講述match和search同樣覆蓋了多行字串:

Python根據正規表示式提供兩種不同的基本操作:match只在字串的開始確認一個匹配,而search在字串的任何匹配的位置都確認。(Perl預設就是這麼設定的)

注意即使在使用以^開始的正規表示式時match也可能不同於search:
^只在字串的開頭匹配,或在多行模式立刻緊跟一個新行。
不管出於什麼模式,match操作只有在一開始字串匹配的情況下能夠成功,或者在可選引數pos給定的開始位置。(不管在這之前有沒有新行)

概念說的足夠多了,下面給大家上些例子:

譯者注:
1.re.match() 從第一個字元開始找, 如果第一個字元就不匹配就返回None, 不繼續匹配. 用於判斷字串開頭或整個字串是否匹配,速度快.
2.re.search() 會整個字串查詢,直到找到一個匹配。
3.re.MULTILINE 匹配多行模式。

相關文章