python的re模塊在使用正則匹配時(shí),一個(gè)*引起的bug

廢話(huà)不多說(shuō),先貼代碼:

derivedDataPath = "/Users/dabao/Library/Developer/Xcode/DerivedData"

allfile = os.listdir(derivedDataPath)

baiduBoxAppDir = ""

pattern = r'BaiduBoxApp-.*'

for one in allfile:

? ? print re.search(pattern, one)

? ? if(re.search(pattern, one)):

? ? ? ? print "Match!"

? ? ? ? baiduBoxAppDir = one

? ? ? ? break

? ? else:

? ? ? ? print "Not Match: "+one

print "BaiduBoxAppDir = "+baiduBoxAppDir

然后文件夾里明明有一個(gè)“BaiduBoxApp-后面一堆字母”的文件夾,就是匹配不出來(lái)。

原因如下:

這里使用的是re.search,re.search 掃描整個(gè)字符串并返回第一個(gè)成功的匹配。

re還有一個(gè)方法是re.match 嘗試從字符串的起始位置匹配一個(gè)模式,如果不是起始位置匹配成功的話(huà),match()就返回none。

re.match只匹配字符串的開(kāi)始,如果字符串開(kāi)始不符合正則表達(dá)式,則匹配失敗,函數(shù)返回None;而re.search匹配整個(gè)字符串,直到找到一個(gè)匹配。

這里我寫(xiě)的pattern = r'BaiduBoxApp-.*',是針對(duì)match寫(xiě)的,如果方法換成match,那會(huì)匹配成功,但如果是search,后面那個(gè).*就要去掉才能匹配到,因?yàn)?*本意是匹配任意字符0或多次,也就是隨便是啥,但是search本身就是局部匹配,也就是在一串字符串中尋找子串,那前提必須是這個(gè)子串至少長(zhǎng)度是確定的,不然怎么局部匹配?哪怕是留著.表示任意一個(gè)字符,也是可以匹配到的。

就醬,記錄。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • re模塊手冊(cè) 本模塊提供了和Perl里的正則表達(dá)式類(lèi)似的功能,不關(guān)是正則表達(dá)式本身還是被搜索的字符串,都可以...
    喜歡吃栗子閱讀 4,198評(píng)論 0 13
  • re模塊 開(kāi)始使用re Python通過(guò)re模塊提供對(duì)正則表達(dá)式的支持。使用re的一般步驟是先將正則表達(dá)式的字符串...
    Alex陌閱讀 1,392評(píng)論 0 0
  • 本文介紹了Python對(duì)于正則表達(dá)式的支持,包括正則表達(dá)式基礎(chǔ)以及Python正則表達(dá)式標(biāo)準(zhǔn)庫(kù)的完整介紹及使用示例...
    Python程序媛閱讀 1,452評(píng)論 0 22
  • 多年前,每逢小鎮(zhèn)古會(huì),都會(huì)唱大戲放電影 ,慶祝這千百年來(lái)關(guān)中地區(qū)流傳下來(lái)的民俗 。方圓十幾里的父老鄉(xiāng)親都會(huì)在這幾天...
    王寧子閱讀 621評(píng)論 13 7
  • 曾經(jīng)迷戀過(guò)這么一句話(huà),找一個(gè)你愛(ài)的人,不如找一個(gè)愛(ài)你的人,找一個(gè)愛(ài)你的人不如找一個(gè)懂你的人。 一個(gè)...
    北方_79d3閱讀 480評(píng)論 1 0

友情鏈接更多精彩內(nèi)容