摘要:它與新行無(wú)關(guān),因此它在模式上與的用法不同。如果沒(méi)有位置能夠匹配這個(gè)模式則返回注意這個(gè)跟在字符的某處有長(zhǎng)度的匹配是有區(qū)別的。
問(wèn):在Python正則模式中search()和match()的區(qū)別是什么?
我已經(jīng)閱讀了現(xiàn)有的相關(guān)文檔,但是我總是記不住,碰到類似的問(wèn)題,我還要不斷地查找再學(xué)習(xí),我希望某個(gè)大神能夠給個(gè)清晰的案例,讓我能夠很好的記住,或者至少能夠在Stackoverflow上有個(gè)地方能夠讓我再學(xué)習(xí)的時(shí)候方便地找到。
答:
re.match位于字符串的開(kāi)頭。它與新行無(wú)關(guān),因此它在模式上與^的用法不同。
正如re.match文檔所說(shuō):
如果在字符串的開(kāi)頭有0個(gè)或更多個(gè)字符符合正則表達(dá)式模式,返回相關(guān)匹配的實(shí)例對(duì)象,如果字符串不符合正則表達(dá)式模式則返回None.(注這個(gè)跟0長(zhǎng)度的匹配是有區(qū)別的)
注:如果你想要在字符串中定位任意一個(gè)匹配位置的話,請(qǐng)轉(zhuǎn)用search()。
re.search搜索整個(gè)字符串,正如re.search文檔所說(shuō):
掃描整個(gè)字符串,如果產(chǎn)生了一個(gè)匹配正則模式就尋找到這個(gè)位置,返回相關(guān)匹配的對(duì)象。如果沒(méi)有位置能夠匹配這個(gè)模式則返回None.(注意這個(gè)跟在字符的某處有0長(zhǎng)度的匹配是有區(qū)別的。)
所以,如果你想要從字符串的一開(kāi)始就進(jìn)行匹配或匹配整個(gè)字符串的話就使用match。它更加快速,否則請(qǐng)使用search。
該文檔有個(gè)專門(mén)的章節(jié)講述match和search同樣覆蓋了多行字符串:
Python根據(jù)正則表達(dá)式提供兩種不同的基本操作:match只在字符串的開(kāi)始確認(rèn)一個(gè)匹配,而search在字符串的任何匹配的位置都確認(rèn)。(Perl默認(rèn)就是這么設(shè)置的)
注意即使在使用以^開(kāi)始的正則表達(dá)式時(shí)match也可能不同于search:
^只在字符串的開(kāi)頭匹配,或在多行模式立刻緊跟一個(gè)新行。
不管出于什么模式,match操作只有在一開(kāi)始字符串匹配的情況下能夠成功,或者在可選參數(shù)pos給定的開(kāi)始位置。(不管在這之前有沒(méi)有新行)
概念說(shuō)的足夠多了,下面給大家上些例子:
# 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() 從第一個(gè)字符開(kāi)始找, 如果第一個(gè)字符就不匹配就返回None, 不繼續(xù)匹配. 用于判斷字符串開(kāi)頭或整個(gè)字符串是否匹配,速度快.
2.re.search() 會(huì)整個(gè)字符串查找,直到找到一個(gè)匹配。
3.re.MULTILINE 匹配多行模式。
來(lái)源:Stackoverflow問(wèn)題。
What is the difference between Python"s re.search and re.match?
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/38148.html
摘要:正則表達(dá)式關(guān)閉或可選標(biāo)志。如果所含正則表達(dá)式,以表示,在當(dāng)前位置成功匹配時(shí)成功,否則失敗。否則指的是八進(jìn)制字符碼的表達(dá)式。 正則表達(dá)式是個(gè)很牛逼的東西,不管是在javascript,還是在Python web開(kāi)發(fā)(http://www.maiziedu.com/course/python-px...)中,我們都會(huì)遇到正則表達(dá)式,雖然javascript和Python的正則表達(dá)式區(qū)別不大...
摘要:正則表達(dá)式匹配的字符串限定范圍和否定除了單字符外,字符集還支持匹配指定的字符范圍。問(wèn)號(hào)要求正則表達(dá)式引擎在當(dāng)前正則表達(dá)式中盡可能少地匹配字符。正則表達(dá)式匹配的字符串表示簡(jiǎn)單浮點(diǎn)數(shù)的字符串?dāng)U展表示法正則表達(dá)式的擴(kuò)展表示法,以問(wèn)號(hào)開(kāi)始。 簡(jiǎn)介 正則表達(dá)式 是包含文本和特殊字符的字符串, 為高級(jí)的文本模式匹配, 抽取, 與文本形式的搜索和替換功能提供了基礎(chǔ) Python通過(guò)標(biāo)準(zhǔn)庫(kù)re模...
摘要:在中,使用的內(nèi)置模塊處理正則表達(dá)式操作。使用正則表達(dá)式對(duì)象在字符串中搜索模式。編寫(xiě)和使用正則表達(dá)式在中創(chuàng)建正則表達(dá)式的第一步是導(dǎo)入模塊正則表達(dá)式使用模式字符串表示,模式字符串是指定所需搜索模式的字符串。 showImg(https://segmentfault.com/img/remote/1460000019166945?w=504&h=300); 來(lái)源 | 愿碼(ChainDes...
摘要:如果經(jīng)過(guò)一系列輸入,最終如果能達(dá)到狀態(tài),則輸入內(nèi)容一定滿足正則表達(dá)式。正則表達(dá)式可以轉(zhuǎn)換為,已經(jīng)有成熟的算法實(shí)現(xiàn)這一轉(zhuǎn)換。不過(guò)有時(shí)候轉(zhuǎn)換為可能導(dǎo)致?tīng)顟B(tài)空間的指數(shù)增長(zhǎng),因此直接用識(shí)別正則表達(dá)式。 原文地址 先來(lái)看一個(gè)讓人震撼的小故事,故事來(lái)自知乎問(wèn)題PC用戶的哪些行為讓你當(dāng)時(shí)就震驚了? 同學(xué)在一個(gè)化妝品公司上班,旁邊一個(gè)大媽(四十多歲)發(fā)給他一個(gè)exl表,讓他在里面幫忙找一個(gè)經(jīng)銷商的資料...
閱讀 3999·2021-11-24 09:38
閱讀 1465·2021-11-19 09:40
閱讀 2797·2021-11-18 10:02
閱讀 3736·2021-11-09 09:46
閱讀 1806·2021-09-22 15:27
閱讀 3139·2019-08-29 15:24
閱讀 1027·2019-08-29 12:40
閱讀 1707·2019-08-28 18:24