問:在Python正則模式中search()和match()的區別是什麼?python
我已經閱讀了現有的相關文檔,可是我老是記不住,碰到相似的問題,我還要不斷地查找再學習,我但願某個大神可以給個清晰的案例,讓我可以很好的記住,或者至少可以在Stackoverflow上有個地方可以讓我再學習的時候方便地找到。正則表達式
答:
re.match位於字符串的開頭。它與新行無關,所以它在模式上與^的用法不一樣。
正如re.match文檔所說:學習
若是在字符串的開頭有0個或更多個字符符合正則表達式模式,返回相關匹配的實例對象,若是字符串不符合正則表達式模式則返回None.(注這個跟0長度的匹配是有區別的)code
注:若是你想要在字符串中定位任意一個匹配位置的話,請轉用search()。對象
re.search搜索整個字符串,正如re.search文檔所說:文檔
掃描整個字符串,若是產生了一個匹配正則模式就尋找到這個位置,返回相關匹配的對象。若是沒有位置可以匹配這個模式則返回None.(注意這個跟在字符的某處有0長度的匹配是有區別的。)字符串
因此,若是你想要從字符串的一開始就進行匹配或匹配整個字符串的話就使用match。它更加快速,不然請使用search。get
該文檔有個專門的章節講述match和search一樣覆蓋了多行字符串:string
Python根據正則表達式提供兩種不一樣的基本操做:match只在字符串的開始確認一個匹配,而search在字符串的任何匹配的位置都確認。(Perl默認就是這麼設置的)it
注意即便在使用以^開始的正則表達式時match也可能不一樣於search:
^只在字符串的開頭匹配,或在多行模式馬上緊跟一個新行。
無論出於什麼模式,match操做只有在一開始字符串匹配的狀況下可以成功,或者在可選參數pos給定的開始位置。(無論在這以前有沒有新行)
概念說的足夠多了,下面給你們上些例子:
# example code: string_with_newlines = """something someotherthing""" import re print re.match('some', string_with_newlines) # matches print re.match('someother', string_with_newlines) # won't match print re.match('^someother', string_with_newlines, re.MULTILINE) # also won't match print re.search('someother', string_with_newlines) # finds something print re.search('^someother', string_with_newlines, re.MULTILINE) # also finds something m = re.compile('thing$', re.MULTILINE) print m.match(string_with_newlines) # no match print m.match(string_with_newlines, pos=4) # matches print m.search(string_with_newlines,re.MULTILINE) # also matches
譯者注:
1.re.match() 從第一個字符開始找, 若是第一個字符就不匹配就返回None, 不繼續匹配. 用於判斷字符串開頭或整個字符串是否匹配,速度快.
2.re.search() 會整個字符串查找,直到找到一個匹配。
3.re.MULTILINE 匹配多行模式。
來源:Stackoverflow問題。
What is the difference between Python's re.search and re.match?