廢話(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è)字符,也是可以匹配到的。
就醬,記錄。